我试图从一个网页得到一些数据,并将其传递到新的窗口,并从那里打印出来。下面是我的代码:
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");
}
当我尝试这样做时,它打开了新窗口,但它保持空,在控制台中它只记录"检查1"然后检查2。我测试了,如果我console.log(WinPrint)它显示在控制台,但如果我做console.log(WinPrint.document)它不显示任何东西,脚本停止在那里。
由于(XSS[跨站脚本])错误,您的代码将无法工作。Firefox阻止您更改其他域的内容。
因为你打开了一个新窗口,你现在有一个不同的域名(大约:空白)比你开始的那个。
有几种方法可以做到这一点,我很快想到的是使用window.create
API并使用查询参数将数据传递到新窗口:
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
将消息传递回后台脚本,然后传递到新窗口。
或者你可以在页面本身注入一个弹出窗口,做一些类似的事情。