Javascript窗口写回调

Javascript window write callback

本文关键字:回调 写回 窗口 Javascript      更新时间:2023-09-26

是否有一种方法可以让父窗口知道子窗口何时加载了它的内容?子脚本中没有任何脚本。

下面是我当前的代码:

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

你有相同的事件在window上触发,所以你可以得到加载事件,如果你打开的页面已经有html,例如

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在某些情况下可以更宽松。你应该看看"启用CORS",这个链接也会对你有所帮助:等待子窗口加载完成