如何获取嵌入在通过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(/
。 这个讨论主题有一些关于这个主题的好信息: innerHTML和SCRIPT标签