【问题标题】:Ajax: injecting code into Internet ExplorerAjax:将代码注入 Internet Explorer
【发布时间】:2009-10-16 20:42:00
【问题描述】:

我无法让以下代码在 Internet Explorer 中运行,它似乎不想执行通过 Ajax 从服务器发回的代码,它什么也不做:

var ajax = new ActiveXObject('Microsoft.XMLHTTP');
ajax.open('GET','http://fromsitewebsite.com/javascript.js',true);
ajax.setRequestHeader('Connection','close');
ajax.onreadystatechange = function()
 {
   if ( ajax.readyState == 4 )
   {
    document.body.innerHTML += '<script type="text/javascript">'+ajax.responseText+'</script>';
   }
 };

ajax.send('');

我已经尝试过这样做,但仍然没有运气;

  document.body.innerHTML += '<script type="text/javascript">('+ajax.responseText+')()</script>')

干杯

【问题讨论】:

    标签: javascript html ajax internet-explorer eval


    【解决方案1】:

    get IE to handle the content of the script tag properly,需要设置.text值。

    var scrElem = document.createElement('script');
    scrElem.type = 'text/javascript';
    scrElem.text = ajax.responseText;
    document.body.appendChild(scrElem);
    

    【讨论】:

      【解决方案2】:

      你为什么不试试:

      var scriptElmnt  = document.createElement('SCRIPT');
      scriptElmnt.type = 'text/javascript';
      scriptElmnt.src  = '/javascript.js';
      document.body.appendChild(scriptElmnt);
      

      如果我没记错的话,这是按预期工作的

      【讨论】:

        【解决方案3】:

        尝试eval返回的代码。

        【讨论】:

          【解决方案4】:

          您可能必须创建脚本节点,然后通过“innerText”属性而不是“innerHTML”设置其内容。无论如何,这是一件很奇怪的事情。您可以只添加一个脚本元素并将其“src”属性设置为您在 AJAX 调用中使用的 URL。

          当你说“什么都不做”时,你检查过脚本错误吗?

          【讨论】:

            【解决方案5】:

            如果是 IE,你需要使用 execScript 方法

            if ( ajax.readyState == 4 )  
            {  
                if (window.execScript)  
                    window.execScript(ajax.responseText);  
                else  
                    document.body.innerHTML += '<script type="text/javascript">'+ajax.responseText+'</  script>';  
            }
            

            上面推荐的eval,在IE中有一些具体的

            【讨论】:

              【解决方案6】:

              一些事情。

              首先 eval() 是邪恶的。如果您在繁重的 javascript 驱动的应用程序中使用它,它会显着降低速度。

              另外,为什么要加载 javascript 代码?一个好主意是考虑另一种方法。如果它是一个小脚本,只需加载它,用户将缓存它并且加载时间会很舒服。如果您想将服务器值添加到页面,请使用 AJAX 并加载 JSON。如果 javascript 文件很大,请尝试将其缩小并使用 gzip 从服务器传送。如果不是上述情况,IE 支持脚本上的一个名为 defer="defer" 的属性,它将呈现并执行您新添加的代码。但我不推荐它,因为它只受 IE 支持。

              ..弗雷德里克

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2012-08-17
                • 1970-01-01
                • 1970-01-01
                • 2012-02-01
                • 1970-01-01
                • 1970-01-01
                • 2016-10-23
                • 1970-01-01
                相关资源
                最近更新 更多