2010-07-14 40 views
0

我們有一個工具,允許人們將代碼添加到動態頁面。在調用AJAX的DOM中插入一個腳本

需要將一些代碼(一個小部件)注入到DOM中,而不是硬編碼到html中。我使用jQuery來做到這一點。問題是,它最終重定向頁面...

我需要解決這個問題。

這裏是一個例子。用下面創建一個頁面:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script> 
<script type="text/javascript"> 
    $(function(){ 

     $('#doInsertW').click(function(){ 
      var wCode = $('#inputWidget').val(); 
      $('#putWidget').html(wCode); 
     }); 

    }); 
</script> 
<input id="inputWidget" /><button id="doInsertW" type="button">Insert</button> 
<div id="putWidget"></div> 

然後粘貼到輸入,你就會明白我的意思:

<script src="http://widgets.twimg.com/j/2/widget.js"></script> 
<script> 
new TWTR.Widget({ 
    version: 2, 
    type: 'profile', 
    rpp: 4, 
    interval: 6000, 
    width: 250, 
    height: 300, 
    theme: { 
    shell: { 
     background: '#333333', 
     color: '#ffffff' 
    }, 
    tweets: { 
     background: '#000000', 
     color: '#ffffff', 
     links: '#4aed05' 
    } 
    }, 
    features: { 
    scrollbar: false, 
    loop: false, 
    live: false, 
    hashtags: true, 
    timestamp: true, 
    avatars: false, 
    behavior: 'all' 
    } 
}).render().setUser('twitter').start(); 
</script> 
+0

我不明白;當你將其添加到頁面時,你希望發生什麼?你不希望嵌入式腳本運行嗎? – Pointy 2010-07-14 18:17:33

+0

是的,我希望它運行。它需要將代碼添加到頁面並顯示小部件。該示例中的一個是一個Twitter小部件。嘗試在#putWidget中對插入代碼進行硬編碼。你會看到它應該看起來如何。它在使用插入方法時需要如此。問題是,當使用插入方法時,它會使我的頁面空白並且不會加載頁面。 – UpHelix 2010-07-14 18:27:39

回答

1

的問題是,widget.js腳本使用document.write放置頁面上的小部件的HTML。如果在頁面仍在加載時調用document.write,則它工作正常。但是,在頁面加載完成後調用document.write將重寫整個頁面。

這裏是一個快速和骯髒的黑客,這將迫使它的工作(在FireFox測試):

$(function(){ 
    document.write = function(c) { $('#putWidget').append(c) }; 

    $('#doInsertW').click(function(){ 
     var wCode = $('#inputWidget').val(); 
     $('#putWidget').html(wCode); 
    }); 

}); 

注意,我只是重寫文件撰寫功能的頁面加載完成後。

+0

我明白了。那真是蹩腳。我不知道任何解決方案,因爲它是他們的代碼。瞭解任何解決方法? – UpHelix 2010-07-14 18:31:28

+0

@戴爾:我剛剛編輯我的答案,包括一個解決方法。 – 2010-07-14 18:33:12

+0

等等,我認爲這樣做可以做到這樣。創建一個頁面,您可以在URL中將代碼傳遞給它。然後從網址抓取代碼並在該網頁上執行。通過ajax將代碼傳遞到頁面應該在代碼寫入其他頁面之後返回代碼。 – UpHelix 2010-07-14 18:36:14

相關問題