我正在构建一个tumblr主题,并且有一个获取视频播放器的ajax调用,返回视频播放器代码并将其登录到控制台(参见#1)。我将返回的html写入元素(#2),然后写出该元素的内容(#3),并解析出标记。
任何人都可以帮助我理解脚本标签被剥离的原因以及如何让脚本运行吗?
console.log(data.posts[0]["video-player"]); //#1
$("#DOMWindow .post-inner .video-container").html(data.posts[0]["video-player"]); //#2
$("#DOMWindow .post-inner .video-container").html(); //#3
以下是控制台中data.posts [0] [“video-player”]
的输出<span id="video_player_21019988413">[<a href="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" target="_blank">Flash 10</a> is required to watch video.]</span><script type="text/javascript">renderVideo("video_player_21019988413",'http://penguinenglishlibrary.tumblr.com/video_file/21019988413/tumblr_m2f2kbQFzu1rsq78z',400,225,'poster=http%3A%2F%2Fmedia.tumblr.com%2Ftumblr_m2f2kbQFzu1rsq78z_r1_frame1.jpg,http%3A%2F%2Fmedia.tumblr.com%2Ftumblr_m2f2kbQFzu1rsq78z_r1_frame2.jpg,http%3A%2F%2Fmedia.tumblr.com%2Ftumblr_m2f2kbQFzu1rsq78z_r1_frame3.jpg,http%3A%2F%2Fmedia.tumblr.com%2Ftumblr_m2f2kbQFzu1rsq78z_r1_frame4.jpg,http%3A%2F%2Fmedia.tumblr.com%2Ftumblr_m2f2kbQFzu1rsq78z_r1_frame5.jpg')</script>
以下是.html()调用的输出,其元素被剥离#3
<span id="video_player_21019988413">[<a href="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" target="_blank">Flash 10</a> is required to watch video.]</span>"
下面是完整的ajax调用,它应该将脚本标记插入到页面中,但不会:
$.ajax({
url: 'http://penguinenglishlibrary.tumblr.com/api/read/json?id=' + audioID,
dataType: 'jsonp',
timeout: 50000,
success: function(data){
var videoPlayer = data.posts[0]["video-player"];
$("#DOMWindow").find(".post-inner .video-container").html(videoPlayer);
}
});
答案 0 :(得分:5)
jQuery .load()
函数总是删除<script>
标记,最重要的是,当您使用“context”变体时,它不会执行它们。
即,
$('#foo').load('http://what.ever.com/stuff .something', function() { /* ... */ });
URL后面的“.something”后缀会触发这个奇怪的“功能”。
我logged a bug about this,解决方案是文档更新。由于各种内部原因,要让它更好地工作是非常困难的。
编辑 - 除了让您的服务器完成分离您需要的页面片段的工作之外,实际上没有直接的解决方法。 jQuery只是不合作,主要是(我认为),因为库必须以某种方式弄清楚需要运行检索页面中其他地方的脚本。
答案 1 :(得分:2)
Pointy说
由于各种内部原因,要让它更好地工作是非常困难的。
内部原因是分配给DOM节点的innerHTML
属性不会执行脚本元素的内容。