2012-04-19 60 views
4

我正在构建一个tumblr主题,并有一个获取视频播放器的ajax调用,视频播放器代码被返回,并将其注销到控制台(请参阅#1)。我将返回的html写出到一个元素(#2)中,然后写出该元素的内容(#3),并将标记解析出来。<script>标签从输出中剥离

任何人都可以帮助我理解脚本标签为什么会被剥离,以及如何让脚本运行吗?

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] [“视频播放器”]

<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); 

    } 
}); 

回答

5

jQuery​​函数总是去掉<script>标签,并且最重要的是,当您使用“上下文”变体时,它不会执行它们。

也就是说,

$('#foo').load('http://what.ever.com/stuff .something', function() { /* ... */ }); 

该URL后 “.something” 后缀触发这个奇怪的 “功能”。

logged a bug about this和解决方案是文档更新。由于各种内部原因,要使其更好地工作会非常困难。

编辑 —真的没有直接的解决方法,除了让你的服​​务器完成分离出你所需要的页面片段的工作。大多数情况下(我认为)jQuery不会合作,因为库必须以某种方式找出需要运行的检索页中其他地方的脚本。

+0

感谢您的回答,非常感谢您的帮助。你能否深入一点,因为我还没有真正理解它?你可能也请解释我如何解决它或另一种方法吗? – Burt 2012-04-19 22:47:26

+1

@Burt肯定......但底线是它不会运行你的脚本。 – Pointy 2012-04-19 22:48:33

2

尖尖说

由于各种内部原因它会是相当困难的,使其更好地工作。

内部原因是分配给DOM节点的innerHTML属性不执行脚本元素的内容。

Can scripts be inserted with innerHTML?解释。

+1

这当然是对的,但是当你使用'.load()'**而没有**后面的“context”后缀时,那么它会**运行脚本。也就是说,库本身抽出所有'