【问题标题】:Javascript open.window returns null in called functionJavascript open.window 在被调用函数中返回 null
【发布时间】:2009-05-13 10:49:55
【问题描述】:

我开发了一个函数,调用时应该打开一个窗口,但它返回null。如果我在原始 JavaScript 函数中打开窗口,它就可以工作。我想它的原始函数将控制权传递给另一个函数,但由于某种原因这不起作用。

这是我的原始函数,这基本上调用了一个新的 JavaScript 文件并加载了一个 HTML 文件,当“准备好”时,它需要显示 window.open 以及现在为字符串形式的 HTML 文件。

order.prototype.printMe = function() {
    order_resume.loadthis("myTestPage.html", "showData");

    // OPENING WINDOW HERE WORKS; but the the html file that is loaded
    // in above line hasn't finsihed loading - so i need to show it form
    // the function below once in "ready" state 

/*      child1 = window.open ("about:blank","_blank");
        child1.document.write( myDocument );
        child1.document.close();
*/      
}

这是我从原始函数调用的函数:

function showResume() {
    this.req = false;

    reservaResumen.prototype.showData = function() {
        if (this.req.readyState == 4) {
            child1 = window.open("about:blank", "_blank"); /// THIS RETURNS NULL
            child1.document.write("test");
            child1.document.close();
        }
    }

    reservaResumen.prototype.loadthis = function(url, myMethod) {
        if (window.XMLHttpRequest && !(window.ActiveXObject)) {
            try {
                this.req = new XMLHttpRequest();
            }
            catch (e) {
                this.req = false;
            }
        }
        else if (window.ActiveXObject) {
            try {
                this.req = new ActiveXObject("Msxml2.XMLHTTP");
            }
            catch (e) {
                try {
                    this.req = new ActiveXObject("Microsoft.XMLHTTP");
                }
                catch (e) {
                    this.req = false;
                }
            }
        }
        if (this.req) {
            var loader = this;
            this.req.onreadystatechange = function() {
                eval("loader." + myMethod + ".call(loader)")
            }
            this.req.open("GET", url, true);
            this.req.send("");
        }
    }​

【问题讨论】:

  • 是否启用了弹出窗口拦截器?
  • 否 - 因为它在原始函数中打开它..
  • 请仔细检查弹出窗口阻止程序设置。浏览器不会在没有用户交互的情况下打开窗口。此外,当用户这样做时,例如。单击操作,但您等待很长时间(例如,通过执行一些异步操作,如 Ajax 请求),浏览器也会阻止窗口并为 window.open 返回 null。
  • 不是这样的,因为它在原始函数中打开
  • 好的,在重做我的代码后,它完全一样,但正在工作..感谢您的回复..不知道发生了什么!再次感谢

标签: javascript function class dom-events


【解决方案1】:

请参阅 this discussion thread,将这个问题归咎于在 64 位 Windows 7 上运行的 32 位 IE8 浏览器。

我几天前刚刚遇到这个问题。我的开发机器开始出现不同的行为,弹出窗口不再在许多网站上工作,包括我开发的那个,而且看不到修复。我必须以管理员身份启动 IE,然后它才能工作。禁用保护模式并不能解决此问题。 64位浏览器没有这个问题。

为什么就我而言,这只是几周前才开始的,我不能说。我怀疑 9/16 有一个安全更新导致行为发生变化。这很奇怪。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-03
    • 1970-01-01
    • 2013-08-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-27
    • 2023-03-29
    • 2023-04-04
    相关资源
    最近更新 更多