tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

open_and_focus_helper.html (2153B)


      1 <!DOCTYPE html>
      2 <html>
      3 <head>
      4  <meta charset='utf-8'>
      5  <script src="/tests/SimpleTest/EventUtils.js"></script>
      6 </head>
      7 <body>
      8  <input></input><br>
      9  <a href="https://example.com" target="test">link</a>
     10  <script>
     11    const MY_ORIGIN = window.location.origin;
     12    const CROSS_ORIGIN = "https://example.org";
     13 
     14    // Creates an iframe with message channel to trigger window open and focus
     15    window.createIframe = function(id, crossOrigin = false) {
     16      return new Promise(resolve => {
     17        const origin = crossOrigin ? CROSS_ORIGIN : MY_ORIGIN;
     18        let iframe = document.createElement("iframe");
     19        iframe.id = id;
     20        iframe.src = origin + window.location.pathname;
     21        iframe.onload = () => resolve(iframe);
     22        document.body.appendChild(iframe);
     23      });
     24    }
     25 
     26    window.sendMessage = function(destWin, msg) {
     27      return new Promise(resolve => {
     28        let channel = new MessageChannel();
     29        channel.port1.onmessage = resolve;
     30        destWin.postMessage(msg, "*", [channel.port2]);
     31      });
     32    }
     33 
     34    window.onMessage = function(event) {
     35      let canReply = event.ports && !!event.ports.length;
     36      if(event.data === "open") {
     37        window.openedWindow = window.open('https://example.com' + window.location.pathname);
     38        if (canReply) event.ports[0].postMessage('opened');
     39      } else if(event.data === "openpopup") {
     40        window.openedWindow = window.open('https://example.com' + window.location.pathname, 'test', 'top=0,height=1, width=300');
     41        if (canReply) event.ports[0].postMessage('popupopened');
     42      } else if(event.data === "focus") {
     43        window.openedWindow.focus();
     44        if (canReply) event.ports[0].postMessage('focused');
     45      } else if(event.data === "elementfocus") {
     46        document.querySelector("input").focus();
     47        if (canReply) event.ports[0].postMessage('elementfocused');
     48      } else if(event.data === "clicklink") {
     49        synthesizeMouseAtCenter(document.querySelector("a"), {});
     50        if (canReply) event.ports[0].postMessage('linkclicked');
     51      }
     52    }
     53    window.addEventListener('message', window.onMessage);
     54  </script>
     55 </body>
     56 </html>