jQuery .load()调用不会在加载的HTML文件中执行JavaScript

Mik*_*ike 81 safari ajax jquery

这似乎只是与Safari相关的问题.我在Mac上尝试了4次,在Windows上尝试了3次,但我仍然没有运气.

我正在尝试加载外部HTML文件并使嵌入的JavaScript执行.

我试图使用的代码是这样的:

$("#myBtn").click(function() {
    $("#myDiv").load("trackingCode.html");
});
Run Code Online (Sandbox Code Playgroud)

trackingCode.html 看起来像这样(现在很简单,但如果我开始工作,会扩展一次):

<html>
<head>
    <title>Tracking HTML File</title>
    <script language="javascript" type="text/javascript">
        alert("outside the jQuery ready");
        $(function() {
            alert("inside the jQuery ready");
        });
    </script>
</head>

<body>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

我在IE(6和7)和Firefox(2和3)中看到了两条警报消息.但是,我无法在Safari中看到这些消息(我需要关注的最后一个浏览器 - 项目要求 - 请不要进行火焰战争).

有关为什么Safari忽略trackingCode.html文件中的JavaScript的任何想法?

最后,我希望能够将JavaScript对象传递给此trackingCode.html文件,以便在jQuery ready调用中使用,但我希望确保在我走这条路之前在所有浏览器中都可以实现.

Ton*_*ler 55

您正在将整个HTML页面加载到div中,包括html,head和body标记.如果您执行加载并在您加载的HTML中只有开始脚本,关闭脚本和JavaScript代码会发生什么?

这是驱动程序页面:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>jQuery Load of Script</title>
        <script type="text/javascript" src="http://www.google.com/jsapi"></script>
        <script type="text/javascript">
            google.load("jquery", "1.3.2");
        </script>
        <script type="text/javascript">
            $(document).ready(function(){
                $("#myButton").click(function() {
                    $("#myDiv").load("trackingCode.html");
                });
             });
         </script>
    </head>
    <body>
        <button id="myButton">Click Me</button>
        <div id="myDiv"></div>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

以下是trackingCode.html的内容:

<script type="text/javascript">
    alert("Outside the jQuery ready");
    $(function() {
        alert("Inside the jQuery ready");
    });
 </script>
Run Code Online (Sandbox Code Playgroud)

这适用于Safari 4.

更新:添加了DOCTYPE和html命名空间以匹配我的测试环境中的代码.使用Firefox 3.6.13测试并且示例代码有效.

  • 您的代码实际上不在FF中工作(IE8 - 工作正常).有没有办法在**浏览器中完成这项工作?谢谢 (2认同)

xtd*_*tds 39

$("#images").load(location.href+" #images",function(){
    $.getScript("js/productHelper.js"); 
});
Run Code Online (Sandbox Code Playgroud)

  • 真的是$ .getScript()在这个问题上很好的解决方案;)+ 1 (5认同)

小智 23

之前的另一个版本的John Pick的解决方案,这对我来说很好:

jQuery.ajax({
   ....
   success: function(data, textStatus, jqXHR) {
       jQuery(selecteur).html(jqXHR.responseText);
       var reponse = jQuery(jqXHR.responseText);
       var reponseScript = reponse.filter("script");
       jQuery.each(reponseScript, function(idx, val) { eval(val.text); } );
   }
   ...
});
Run Code Online (Sandbox Code Playgroud)

  • 这是最好的解决方案!我爱你@Yannick,你结识了我的一天 (2认同)

小智 13

我意识到这是一个较旧的帖子,但对于任何人来到这个页面寻找类似的解决方案......

http://api.jquery.com/jQuery.getScript/

jQuery.getScript( url, [ success(data, textStatus) ] )
Run Code Online (Sandbox Code Playgroud)
  • url - 包含发送请求的URL的字符串.

  • success(data, textStatus) - 请求成功时执行的回调函数.

$.getScript('ajax/test.js', function() {
  alert('Load was performed.');
});
Run Code Online (Sandbox Code Playgroud)


小智 9

如果您将HTML字段加载到动态创建的元素中,这似乎不起作用.

$('body').append('<div id="loader"></div>');
$('#loader').load('htmlwithscript.htm');
Run Code Online (Sandbox Code Playgroud)

我看一下firebug DOM,根本没有脚本节点,只有HTML和我的CSS节点.

有谁遇到过这个?