3

我在这里调用一个servlet。Get 调用发生在 servlet 上,document.getElementById('testURL').value + '?opn=getKey&rand='+ Math.random();完成后。这将返回键和对callback()函数的调用。在 IE 9 中这很好用。但在 ie 10 中,它需要在此调用后暂停一些。所以我不得不发出以下警报。谁能帮我知道为什么在 IE10 中会出现这个问题?以及如何解决这个问题?警报不是一种正确的方法。提前致谢!

function getKey(){ 
        var headID = document.getElementsByTagName("head")[0]; 
        var scriptEmt =document.createElement('script'); 
        scriptEmt.type='text/javascript'; 
        scriptEmt.src=document.getElementById('testURL').value + 'opn=getKey&rand='+ Math.random(); 
        if(navigator.appVersion.indexOf("MSIE 10.0") != -1){
            alert("alert1..");
            alert("alert2....");
        }
        headID.appendChild(scriptEmt);          
    }   

function callback(){ 
...
...
}
4

1 回答 1

0

查看代码问题似乎是

headID.appendChild(scriptEmt);

在脚本“src”属性实际完成填充之前执行,这意味着当实际附加到文档的脚本元素没有“src”属性时,这意味着实际上没有代码可以实际执行scriptEmt 元素。这也解释了为什么回调永远不会被调用。

更好的解决方案是使用 ajax 请求来获取密钥。使用 ajax 从 servlet 加载键值,一旦你有了键值,你才应该创建脚本标签并将其附加到文档中。这样,您将确保 script src 属性具有值,并且一旦将其附加到文档中,脚本将被执行并调用回调。

至于为什么这会影响 IE10,我只能猜测,但我会冒险猜测对 IE10 所做的更改。Microsoft 对 IE10 进行了许多更改,其中许多更改是围绕 javascript 性能进行的,因此可能只是运行速度快了几分之一秒,从而导致了您所看到的行为。就像我说的那样,这只是一个猜测,我没有“真实”的数据或事实来支持这一点!

于 2013-09-24T09:49:23.260 回答