javascript弹窗文件永远不会是 "ready"

标签 javascript popup readystate

我正在使用 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/

相关文章:

JavaScript 创建图像和 document.readyState

javascript - Angular 1.3 - 实例化模块时出错

javascript - 如何在 Express 中为 Express.js 中的 Mongo 查询创建 UTC 时间

javascript - Kendo Grid 上的自定义排序可以通过编程方式触发

javascript - 如何从 javascript 中找到模态对话框开启器?

javascript - WordPress 自定义帖子类型弹出窗口 - jquery 和 ajax?

javascript - 从 PopUp 返回值到父级

javascript - XMLHttpRequest 中的不同就绪状态是什么意思,我该如何使用它们?

ajax - readyState 是如何工作的?

javascript - 如何使用名称向extjs中的组合框添加颜色