【问题标题】:Dynamically adding a script tag to loaded HTML - error in IE7&8动态添加脚本标签到加载的 HTML - IE7&8 中的错误
【发布时间】:2011-12-15 21:24:49
【问题描述】:

我已经坚持了很长一段时间 - 任何帮助将不胜感激。

基本上我正在将 HTML 加载到页面中,但是加载的 HTML 需要在其中的特定位置包含一个外部脚本。我发现最好的方法是使用以下代码:

$('#blah').load('blah.htm',
    function(){
        var script = document.createElement('script');
        script.type = 'text/javascript';
        script.src = "[external script url + query string here]";
        $('#blah_blah')[0].appendChild(script);                 
});

编辑: 我使用“appendChild”而不是 jQuery 的“append”的原因是 $.append 将脚本创建的视频播放器添加到完全错误的元素中。如果我使用 appendChild,它会被添加到指定的正确元素中。我认为这可能与 jQuery 的插入方法有关,如本答案所述: Can't append <script> element

我使用的代码在 Firefox 和 Chrome 中运行良好,但在 IE7 和 8 中我收到错误消息“无法获取属性 'appendChild' 的值:对象为空或未定义”,并且脚本标签不能在 DOM 中可见。

如果我包含该行:

$("#blah_blah")[0].appendChild(document.createTextNode("test"));

文本节点“test”被添加到 DOM,并且可以在页面上看到 - 所以看起来“appendChild”确实有效,但附加脚本标记存在问题。

这可能是 IE 特定的安全问题吗?

【问题讨论】:

  • 为什么脚本需要在特定位置?
  • 无复制。它对我有用...jsfiddle.net/QKM2D
  • 脚本需要放在一个特定的位置,因为它用于第三方视频服务 - 视频播放器在脚本标签所在的位置呈现。不使用 jQuery append 的原因在提供的链接中。
  • 感谢您创建 jsfiddle,但它显示了相同的行为 - 当我调用第三方脚本时,它在 FF 中运行良好,但在 IE 中出现错误。我想这一定是一个跨域问题。

标签: javascript jquery html ajax


【解决方案1】:

有什么问题:

   $.getScript("script.js");

【讨论】:

  • 脚本用于第三方视频服务,我需要具体说明它的去向。如果我在 HTML 中的某些脚本标签中使用 $.getScript ,它会出现在完全错误的位置。我认为这与 jQuery 处理和评估外部脚本的方式有关。这似乎是一个相关问题:bennadel.com/blog/…
  • 也许您可以在加载后将其重新定位到您需要的位置?
  • 我希望从正确的位置开始,但我想这是一个选择,谢谢 shaun。
猜你喜欢
  • 2016-12-14
  • 2015-05-08
  • 2022-11-23
  • 2016-07-18
  • 1970-01-01
  • 2018-11-27
  • 2020-12-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多