【发布时间】:2012-07-12 13:49:54
【问题描述】:
我正在使用 Javascript 打开一个空白窗口,用最低限度填充它并注入一个脚本标记以包含 JQuery,但窗口属性 readyState 永远不会超过加载,因此 JQuery 永远不会触发。这是demo on jsFiddle。我不明白为什么弹出窗口没有更新它的 readyState。
var popup = window.open("", "popup", "height=500,width=700");
var doc = popup.document;
doc.write("<!doctype html><html><head></head><body></body></html>");
var script = doc.createElement("script");
script.type = "text/javascript";
script.src = "https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js";
script.onload = function() {
console.log(doc.readyState);
popup.$(document).ready(function() {
console.log(doc.readyState);
});
}
doc.getElementsByTagName("head")[0].appendChild(script);
这是没有 JQuery 的类似代码——readyState 窗口属性的相同问题永远不会超出“加载”范围。
var popup = window.open("", "popup", "height=500,width=700");
var doc = popup.document;
doc.write("<!doctype html><html><head></head><body></body></html>");
console.log(doc.readyState);
【问题讨论】:
-
我认为这是一个沙盒限制,因为弹出页面 URL 与您的脚本没有相同的域。
-
空白页(使用“”)不会在同一个域上吗?我在 Chrome 中没有收到任何适用限制的错误。另外,在我的完整代码中,我继续调用弹出窗口的 JavaScript 调用,知道它在技术上已经准备好——即使窗口不这么认为。只是没有我想要的那么干净。
-
您为什么使用古老的 window.open 而不是使用众多 jQuery 模态对话框之一?
-
此代码位于我无法控制的窗口的 iFrame 内。如果 iFrame 尺寸太小,此功能允许用户在设置为较大尺寸的弹出窗口中打开内容。
标签: javascript popup readystate