2011-05-28 205 views
1

我:停止執行JavaScript

$('body').data('data1', '<script type="text/javascript">console.debug('execute');</script><div>example</div>'); 

和:

<div id="content"></div> 

當我這樣做:

$(document).ready(function() { 
    $('#content').html($('body').data('data1')); 
}); 

然後JavaScript的執行。如何防止執行?可能嗎?

+6

其實,你會得到一個語法錯誤。即使你解決了這個問題,你期望會發生什麼?如果你不想讓腳本運行,那你爲什麼要將它插入到DOM中? – 2011-05-28 02:01:43

+0

對不起,語法錯誤。我是從記憶中寫下來的。這個例子是一個大問題的例子。只是我還必須存儲JS代碼。 – 2011-05-28 02:10:54

回答

1

您必須從HTML字符串中去除script標籤。

這適用於Firefox/Chrome,儘管我不瞭解其他瀏覽器。請注意,這隻適用於格式良好的(x)html。

編輯:如果你也想的JS,你可以修改前面的代碼這樣:

var scripts = []; 
$('script', doc).remove().each(function() { 
    scripts.push($(this).html()); 
}); 

提醒你,你甚至不必刪除script標籤。現在,響應是在其單獨的DOM文檔中,它不會搞亂您自己的腳本,並且您可以使用簡單的$('selector', doc) jQuery來訪問您需要的任何內容。

0

要停止腳本執行的唯一方法是將其從數據中刪除。原型框架使用如下正則表達式來執行此操作:

<script[^>]*>([\\S\\s]*?)<\/script> 
+0

嗯,不要用正則表達式解析HTML?請? – 2011-05-28 02:16:10

+0

我知道這是令人討厭的。然而它工作得很好。它直接從原型源代碼中複製。這樣做意味着可以使用格式錯誤的XHTML,並且也可以在所有瀏覽器中使用。 – Daniel 2011-05-28 02:45:38

+0

好主意。我已經刪除了這些標籤,但以另一種方式。 – 2011-05-28 03:13:07

0

考慮一種中和JavaScript包含的替代方法。下面是一個簡單的函數編寫一個HTML被添加到該文件:

function preventJS(html) { 
    return html.replace(/<script(?=(\s|>))/i, '<script type="text/xml" '); 
} 

如何使用:

$("#content").append(preventJS("<span>Hello 1<script type='text/javascript'>alert('Hello 1!');<\/script></span>")); 

它在這裏詳細描述 - JavaScript: How to prevent execution of JavaScript within a html being added to the DOM。我在Chrome,IE和FireFox中測試過。我希望它也能爲你工作。