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>