2012-02-13 63 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