我正在使用 Javascript 打开一个空白窗口,用最低限度填充它并注入(inject)一个脚本标记以包含 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,则就绪状态不会改变。它将被“初始化”或“加载”——取决于您的浏览器。您可以通过在弹出窗口的控制台窗口中设置 document.location 来查看此更新,如下面的命令:
console.log(document.readyState);
document.location = "http://yourdomain.com";
console.log(document.readyState);
如果您将位置发送到您所在域以外的域,您将没有修改窗口对象的安全性。解决此问题的一种方法是使用 iframe 并设置源 - 如下所示:
var nw = window.open('', "MyWindowID", "fullscreen=no, toolbar=no, menubar=no,status=no,location=no");
var html = '<iframe id="document-{aid}" style="width:100%;height:100%;" src="http://www.google.com"></iframe>';
nw.document.write(html);
nw.focus();
参见:https://stackoverflow.com/a/1443839/1220302
关于此的注意事项是尝试将弹出窗口包装在 $(popup) 中并挂接就绪事件。
这应该适合你:
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";
$(popup).ready(function(){
console.log('loaded');
});
关于javascript弹窗文件永远不会是 "ready",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11453303/