如何获取嵌入在通过jquery load()方法检索的内容中的脚本?

我在SO(以及一般的网站)上发现了几个大致相同问题的问题,但答案似乎总是建议构建代码的其他方法,以避免解决这个潜在问题。

例如,许多人建议(并且我同意一个很好的建议)将您的代码放在jquery load方法的回调中,在调用页面而不是被调用页面上。 但是我有一些可能出现在某些资源中的独特脚本,因此我不想为每次加载都这样做,也不一定知道这些脚本是什么。

这是一个测试设置,用于演示我正在尝试做什么。 简短的总结是当我从main.htm加载https://stackoverflow.com/questions/1369744/how-to-get-scripts-to-fire-that-are-embedded-in-content-retrieved-via-the-jquery/partial.htm时,它的脚本不会触发。

main.htm中:

     main file    
LOADED CONTENT WILL GO HERE
$(function(){ $('#links a').click(function() { var $panel = $('#panel'); $panel.show(); $panel.html('Please wait...'); var href = $(this).attr('href'); $('#panel').load(href + ' #content'); return false; }); });

好的,这个页面上非常简单的function。 想象一下,还有更多链接,其中一些可能需要编写脚本,而其他链接则不需要。

这是https://stackoverflow.com/questions/1369744/how-to-get-scripts-to-fire-that-are-embedded-in-content-retrieved-via-the-jquery/partial.htm

     partial file   

Hey, I am the partial file!

alert('I am some JS in the partial file! But sadly I do not execute...');
I am some other content on the page that won't be included by jquery.load()...

请注意,我在https://stackoverflow.com/questions/1369744/how-to-get-scripts-to-fire-that-are-embedded-in-content-retrieved-via-the-jquery/partial.htm中的脚本不会触发。 所以,我的问题仍然是:如何解决这个问题, 排除任何答案,告诉我把它放在.load()方法的回调中。 (这可能是因为我可能不知道这些部分页面可能包含或需要哪些脚本!)

谢谢!


更新#1:

我想一个可接受的答案就是“你做不到”。 但是,我想知道这是否确实如此。 我还没有找到任何正式陈述的东西。

此外,当我之后使用firebug检查panel区域时,根本没有脚本元素。 就像它被load解析一样。


更新#2:

只有在将选择器用作href的一部分时,我才将其缩小为一个问题。 加载整个"somepage.html"将执行脚本,但加载"somepage.html #someregion"则不会。

 $panel.load('somepage.html'); // my script fires! $panel.load('somepage.html #someregion'); // script does not fire 

我将尝试寻找为什么在jquery源代码中可能出现这种情况……

好吧,这似乎是设计的。 显然,为了让IE快乐,我们其余的人都会受苦。 这是jquery源代码中的相关代码:

 // See if a selector was specified self.html( selector ? // Create a dummy div to hold the results jQuery("
") // inject the contents of the document in, removing the scripts // to avoid any 'Permission Denied' errors in IE .append(res.responseText.replace(//g, "")) // Locate the specified elements .find(selector) : // If not, just inject the full result res.responseText );

我想知道,如果不是只删除脚本,我可以修改jquery源以包含它们以其他方式使IE快乐吗? 我还没有在网上找到任何其他事情来讨论这个问题,我敢肯定我不是唯一被这个难过的人?

我之前遇到的问题是IE没有运行不包含defer属性的注入 。 这个讨论主题有一些关于这个主题的好信息: innerHTML和SCRIPT标签