我使用<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
而不是选择器将外部内容加载到div元素中。如果加载的内容嵌入了JS,则JS按预期工作。但是,如果内容包含带有jquery.load()
的脚本标记,则不会加载js代码。
我在这个观察中是否正确?如果有的话,除了在加载的内容中嵌入JS之外还有一个很好的解决方案吗?
编辑:
一些澄清和观察:
加载我正在使用的内容
src=path-to-js-code
将加载代码更改为:
$("#DivId").load("path/to/content.php", CallbackFunction(response, status, xhr) {
error checking and post processing code
});
似乎没有改变行为(更多关于下面的行为)
我没有尝试解析响应以检索脚本src然后使用$.get("path/to/content.php", CallbackFunction(response, status, xhr) {
error checking
$("#DivId").html(response);
post processing
});
。
现在更多关于行为......
使用Firefox,似乎外部JS已加载,但仅限于距离上次加载约2分钟。我没有看到Firebug中的尝试,除非在外部JS的最后一次加载后刷新大约2米。 (奇怪的)。当我进行JS代码更改并进行刷新时,它没有加载我的新代码,因此也没有加载原始问题。
所以我会根据这个明确的行为(2m缓存?)撤回我的问题。
感谢。
答案 0 :(得分:0)
.load()
和.html()
jQuery方法都使用.innerHTML
属性。这不会执行添加了<script>
标记的脚本。使用常规的AJAX调用,例如.get()
然后在回调中使用.append()
添加HTML字符串,脚本将在解析后运行,例如。
$.get("path/to/content.php", function(response, status, xhr) {
// error checking
$("#DivId").append(response); // Any <script> tags in the response string will execute
// post processing
});
您需要确保在.append()
答案 1 :(得分:0)
我想知道你可以使用正则表达式在$.load
方法的响应文本中获取脚本src,然后使用$.getScript()
方法加载脚本,可能是这样的:
$("#DivId").load("path/to/content.php", function(response, status, xhr) {
var regexp = new RegExp('script.*?src="(.*?)"'),
execresults = regexp.exec(response);
if(execresults.length > 1)
{
// the first result is the entire match including
// the 'script..src=', so abandon it
var matches = execresults.slice(1);
$.each(matches, function(){
$.getScript(this, function(){
// do something after load script
});
});
}
});
希望这可以提供帮助
答案 2 :(得分:0)
这是将外部JS加载到jQuery的简单方法
$.ajax({
type: "GET",
url: "path/to/content.php",
dataType: "script"
success:CallbackFunction(response, status, xhr)
});