summaryrefslogtreecommitdiff
path: root/packages/taler-wallet-webextension/src/api/browser.ts
blob: b69a49680958a70ee1c9e87d39e1fa50fdfd7a7e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
function searchForTalerLinks(): string | undefined {
  let found;
  found = document.querySelector("a[href^='taler://'")
  if (found) return found.toString()
  found = document.querySelector("a[href^='taler+http://'")
  if (found) return found.toString()
  return undefined
}

async function getCurrentTab() {
  let queryOptions = { active: true, currentWindow: true };
  let [tab] = await chrome.tabs.query(queryOptions);
  return tab;
}



export async function findTalerUriInActiveTab(): Promise<string | undefined> {
  if (chrome.runtime.getManifest().manifest_version === 3) {
    // manifest v3
    const tab = await getCurrentTab();
    const res = await chrome.scripting.executeScript({
      target: {
        tabId: tab.id!,
        allFrames: true,
      } as any,
      func: searchForTalerLinks,
      args: []
    })
    return res[0].result
  }
  return new Promise((resolve, reject) => {
    //manifest v2
    chrome.tabs.executeScript(
      {
        code: `
        (() => {
          let x = document.querySelector("a[href^='taler://'") || document.querySelector("a[href^='taler+http://'");
          return x ? x.href.toString() : null;
        })();
        `,
        allFrames: false,
      },
      (result) => {
        if (chrome.runtime.lastError) {
          console.error(chrome.runtime.lastError);
          resolve(undefined);
          return;
        }
        resolve(result[0]);
      },
    );
  });
}