Javascript window 写回调

Javascript window write callback

有没有办法让 parent 知道 child window 何时加载了它的内容? child.

中没有任何脚本

这是我当前的代码:

var printWindow = window.open('', '_blank');
printWindow.document.write(clonedElement.html());
printWindow.onreadystatechage = function() {
    console.log('this does not work.');
};

您有在 window 上触发的相同事件,因此如果您打开带有 html 的页面,您可以获得 load 事件, 例如

var b = new Blob([clonedElement.html()], {type: 'text/html'}),
    uri = URL.createObjectURL(b),
    printWindow;
printWindow = window.open(uri, '_blank');
printWindow.addEventListener('load', function () {
    URL.revokeObjectURL(uri); // release these
    b = null;                 // from memory
    // do something else
});

请注意这里会有竞争条件(尽管您几乎总是会赢,即如果页面加载并且事件在打开和添加侦听器之间触发)


或者,没有比赛

var b = new Blob([clonedElement.html()], {type: 'text/html'}),
    uri = URL.createObjectURL(b),
    printWindow = window.open('', '_blank');
printWindow.addEventListener('load', function () {
    URL.revokeObjectURL(uri); // release these
    b = null;                 // from memory
    // do something else
});
printWindow.location = uri;

看来您可能遇到了跨域策略问题。父页面和子页面必须托管在同一域中。浏览器,例如 chrome,将不允许它在某些情况下 FF 可以更宽松的地方。您应该查看 'enabling CORS' 并且这个 link 也应该对您有所帮助: Waiting for child window loading to complete