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
有没有办法让 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