2012-02-13 61 views
2

我想动态地插入一些脚本标记与一些JavaScript代码在它使用JavaScript。我基本上是试图用jwplayer封装一个文件,但脚本字符串正在打破页面中的其他JavaScript代码。我如何正确地做到这一点?使用JavaScript动态插入JavaScript?

导致问题的行:

 $file_link_insert = "<script type='text/javascript'>jwplayer('mediaplayer').setup({flashplayer: 'player.swf', file: '"+$href+"'});</script>"; 

休息的功能裁判:

$(".file_link").live("click", function(e){ 
       e.preventDefault(); 
       var $href = $(this).attr("rel"); 
       // Dialog   
       $('#filelink').dialog({ 
        autoOpen: true, 
        width: 300, 
        modal: true, 
        buttons: { 
         "Ok": function() { 
          if($("input[name=file_link_text]").val()!=""){ 

           $file_type = fileType($href);//determine if its video file see function below. 

           if($file_type == 'vid'){ 

            $file_link_insert = "<script type='text/javascript'>jwplayer('mediaplayer').setup({flashplayer: 'player.swf', file: '"+$href+"'});</script>"; 

            // $file_link_insert = " <p><a href=\""+$href+"\">"+$("input[name=file_link_text]").val()+"</a></p> "; 

           }else { $file_link_insert = " <p><a href=\""+$href+"\">"+$("input[name=file_link_text]").val()+"</a></p> "; } 

           $("#_tinyMCEinit_ifr").contents().find("body").append($file_link_insert); 
           $("#content_editor ul li:first a").click(); 
           $(this).dialog("close"); 
           $("input[name=file_link_text]").val(""); 
           } else { alert("You must enter text label for your link!"); } 
          }, 
         "Cancel": function() { 
          $(this).dialog("close"); 
          } 
         } 
       }); 
      }); 
+0

为什么不在你的if块中调用这一行? – Mikhas 2012-02-13 11:31:22

+0

问题是''实际上过早地结束了js。 – jurgemaister 2012-02-13 11:36:07

+0

这实际上是[jQuery的副本:不能附加' – 2012-02-13 11:58:19

0

您需要创建通过DOM API的脚本。 document.createElement(“script”);

1

我认为正确的方法是使用DOM和动态加载JavaScript和附加任何你希望:

var script = document.createElement('script'); 
script.type = 'text/javascript'; 
script.src = "myScript.js"; 
$("head").append(script); 

追加到head标签在这种情况下,您可以script.src更改为脚本。内联脚本的文本。

+1

[设置'script.type'是不必要的。](http://mathiasbynens.be/notes/async-analytics-snippet#type) – 2012-02-13 11:55:13

+0

不必要,但很好定义它的代码可读性。 – sysop 2012-02-13 11:57:39

+0

这是如何使代码更具可读性的? – 2012-02-13 12:01:13

1

这是错误的:

$file_link_insert = "<script type='text/javascript'>jwplayer('mediaplayer').setup({flashplayer: 'player.swf', file: '"+$href+"'});</script>"; 

You need to escape </script> here or it will close the <script> element.使用一个简单的JavaScript escape sequence,例如<\/script>

$file_link_insert = "<script>jwplayer('mediaplayer').setup({flashplayer: 'player.swf', file: '"+$href+"'});<\/script>"; 
+0

这个工程,但现在我有一个新的问题,jwplayer没有插入tincymce如我所料。 – user794846 2012-02-13 11:55:59