Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
IE11中未触发Javascript onload_Javascript_Internet Explorer 11 - Fatal编程技术网

IE11中未触发Javascript onload

IE11中未触发Javascript onload,javascript,internet-explorer-11,Javascript,Internet Explorer 11,我正在使用以下命令创建一个新窗口: var windowX = window.open('page.html', 'newWindow', 'width=600,height=600'); 新窗口只是一个空白的html页面,其中包含javascript,javascript构造了一个新对象,然后我将该对象与一些javascript一起使用,在页面加载后,我将注入更多javascript 我的解决方案可以在chrome和firefox中使用,但在IE11中似乎不起作用。警报不显示,以下代

我正在使用以下命令创建一个新窗口:

var windowX = window.open('page.html', 'newWindow', 'width=600,height=600');    
新窗口只是一个空白的html页面,其中包含javascript,javascript构造了一个新对象,然后我将该对象与一些javascript一起使用,在页面加载后,我将注入更多javascript

我的解决方案可以在chrome和firefox中使用,但在IE11中似乎不起作用。警报不显示,以下代码也不显示

windowX.onload = function() {
    //I've added the alert just to see if the onload is firing...
    windowX.alert('hello!');
    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.language = 'JavaScript';
    script.src = '/scripts/newScript.js';
    windowX.document.head.appendChild(script);
};

我尝试使用jQuery
$(windowX).ready(…)
&
$(windowX).load(…)
,它仍然在chrome中工作,但在IE11中没有成功。

没问题-您不能处理未完成对象的属性(“无法设置未定义或空引用的属性'onload'),但此代码在IE11中工作(不需要加载空页):


但您是对的,这两个浏览器在加载期间都可以看到它们(例如window.name在IE中不存在,但在这两个浏览器中都存在)。

这没关系-您无法处理未完成对象的属性(“无法设置未定义或空引用的属性‘onload’”),但此代码在IE11中工作(不需要加载空页):


但是你是对的,这两个浏览器在加载过程中都是可见的(例如window.name在IE中不存在,但在这两个浏览器中都存在)。

我发现问题在于IE11运行的是
window.open()
作为一项同步任务,在窗口打开并加载之前阻止任何进一步的javascript运行,因此不会触发随后声明的onload事件,因为新窗口已“加载”

为了解决这个问题,我检查用户浏览器是否为IE11,并使用jquery触发加载事件:

if (!!window.MSInputMethodContext && !!document.documentMode) {
    $(windowX).trigger('load');
}

我发现问题在于IE11作为同步任务运行
window.open()
,在窗口打开并加载之前阻止任何进一步的javascript运行,因此此后声明的onload事件永远不会触发,因为新窗口已经“加载”

为了解决这个问题,我检查用户浏览器是否为IE11,并使用jquery触发加载事件:

if (!!window.MSInputMethodContext && !!document.documentMode) {
    $(windowX).trigger('load');
}


控制台中有错误消息吗?@Teemu没有,但是很难说,因为我要等到窗口出现后一秒钟左右才能查看控制台。代码在主窗口中执行,控制台应该一直可用。@Teemu那么没有,一点错误都没有。控制台中有错误消息吗?@Teemu没有,但是我很难说出来在窗口出现后一秒钟左右才能查看控制台。代码在主窗口中执行,控制台应该一直可用。@Teemu没有,没有任何错误。我正在加载的html页面看起来是空的,但它包含我尝试执行的操作所需的javascript代码。因此我需要加载一个页面。我刚刚测试了在没有加载页面的情况下使用e代码,它仍然不会触发警报。奇怪的复杂-如果page.html改为访问opener,将不会更容易?以这种方式正确同步相当复杂。不幸的是,没有,需要在主窗口上完成许多动态javascript并传递到新窗口。我只是没有包括t因为它与问题无关。@您是否可以使用
opener
来引用主窗口。只需将创建内容的函数设置为全局函数,并从弹出窗口中调用它。然后,我使用的难看的解决方案是检查document.readyState(setInterval)新窗口的一部分,并在它确定后执行您的加载部分。但您将不得不作出许多像if(窗口和窗口文档等)这样的假设,即使在这之后,如果打开的页面有连接问题、不可用等,它也可能会断开。(假)CORS错误等。我加载的html页面看起来是空白的,但它包含我尝试执行的操作所需的javascript代码。因此,我需要加载一个页面。此外,我只是在没有加载页面的情况下测试了代码,它仍然不会触发警报。奇怪的复杂-如果page.html改为访问opener,将不会更容易吗?对s来说相当复杂以这种方式正确同步。不幸的是,主窗口上需要执行许多动态javascript并传递到新窗口。我只是没有包括这些,因为这与问题无关。@您可以使用
opener
引用主窗口吗?只需将创建内容的函数设为全局函数,然后调用I然后我使用的丑陋的解决方案是检查新窗口的document.readyState(setInterval)并在它正常后执行你的onload部分。但是你必须做很多if(窗口和window.document等),即使在这之后,如果打开的页面有连接问题、不可用等(假的)CORS错误等,它也可能会中断。