无法在新打开 window JS 上访问文档

Can't access document on new open window JS

我正在尝试从网页获取一些数据并将其传递给新 window 并从那里打印。这是我的代码:

var print_btn;
let win;

document.getElementsByTagName('html')[0].innerHTML = document.getElementsByTagName('html')[0].innerHTML +"<button class=\"printbuton\">Print Button</button>";

print_btn = document.getElementsByClassName('printbuton')[0];

print_btn.onclick = function() {
    
    console.log("check 1");
    
    var WinPrint = window.open('', '', 'left=0,top=0,width=384,height=900,toolbar=0,scrollbars=0,status=0');
    console.log("check 2");
    WinPrint.document.write('Print this');
    console.log("check 3");
    WinPrint.document.write('Print that');
    WinPrint.document.write('and this');
    
    console.log("button pushed");
}

当我尝试这个时,它会打开新的 window,但它仍然是空的,并且在控制台中它只记录“检查 1”和“检查 2”。 我测试过,如果我 console.log(WinPrint) 它会显示在控制台中,但如果我这样做 console.log(WinPrint.document) 它不会显示任何内容并且脚本会停在那里。

由于 (XSS [Cross Site Scripting]) 错误,您的代码将无法运行。 Firefox 正在阻止您更改其他域的内容。

由于您要打开一个新的 window,您现在拥有一个与开始时不同的域名 (about:blank)。

有几种方法可以解决这个问题,很快想到的是使用 window.create API 并使用查询参数将数据传递给新的 window:

function onCreated(windowInfo) {
  console.log('SUCCESS');
}

function onError(error) {
  console.log(`Error: ${error}`);
}

print_btn.addEventListener('click', event => {

  var popupURL = browser.extension.getURL("popup/popup.html?line=blahblah&line2=loremipsum");

  var creating = browser.windows.create({
    url: popupURL,
    type: "popup",
    height: 200,
    width: 200
  });
  creating.then(onCreated, onError);

});

或者您可以通过使用 windows.create 打开,然后使用 runtime.sendmessage 将消息传递回后台脚本,然后传递到新的 window.

或者您可以将弹出窗口注入页面本身并执行类似的操作。