當在XHR中使用responseHTML時,Firefox在加載的responseHTML內執行javascripts,而鉻不會。如果我添加一個將解析和執行腳本的腳本,它將在鉻上工作,但它們會導致在Firefox中執行兩次。任何想法如何知道瀏覽器是否會執行加載的腳本或不是通過代理嗅探? PS:我使用的JS框架不是jQuery或原型或任何東西在響應中執行JavaScriptHTML
回答
不要嗅。測試。我不記得Mozilla何時觸發腳本的機制,但應該可以製作一個內部測試,以檢測腳本是否被觸發,然後進行相應的修補。
我一直在谷歌搜索過去幾個小時,沒有迴應。我有點眼花繚亂,似乎是一個非常重要的X瀏覽器問題,雖然 – fabjoa 2010-06-28 00:51:08
請勿使用responseHTML。改爲使用responseText並使用以下功能。 onSuccess功能對您很重要。在你的Ajax請求成功處理程序中使用它。
function showHtmlInElement(targetId, htmlUrl) {
var target = document.getElementById(targetId);
var Util = jaf.core.Util;
Util.ajax({
url: htmlUrl,
dataType: "text/html",
// ---------------------------------------------------------------
onSuccess: function(xhr) {
var responseText = xhr.responseText;
target.innerHTML = responseText;
// collect all the script tag content...
var scriptText = "";
var arrScripts = target.getElementsByTagName("script");
for(var i = 0, len = arrScripts.length; i < len; i++) {
var se = arrScripts[i];
scriptText += se.innerHTML;
}
if((scriptText = Util.trim(scriptText)).length != 0) {
eval.call(window, scriptText);
}
},
// ---------------------------------------------------------------
onError: function(xhr, code, message) {
var responseText = xhr.responseText;
var content = "<p class='error'>" + responseText + ": "
+ message + "(" + code + ")</p>";
target.innerHTML = content;
}
});
}
我測試過這個opera,firefox,chromium,safari。雖然沒有在IE6中測試過。
謝謝你,我會調查它......也在IE6上讓你知道:) – fabjoa 2010-06-28 05:14:46
這是第n個時間,我現在回答這個問題:)
// response is the data returned from the server
var response = "html\<script type=\"text/javascript\">alert(\"foo\");<\/script>html";
var reScript = /\<script.*?>(.*)<\/script>/mg;
response = response.replace(reScript, function(m,m1) {
eval(m1); //will run alert("foo");
return "";
});
alert(response); // will alert "htmlhtml"
thx肖恩,但那不是我的問題。如果我按照你的建議進行操作,腳本將在Chrome中執行一次,但在執行腳本的firefox中執行兩次。我已經找到了一種方法,將一個JavaScript預先添加到innerHTML中,它將告訴onload腳本執行與否。 – fabjoa 2010-07-03 11:06:10
這不是事實。在將替換腳本插入DOM之前,替換腳本將被刪除,因此它只能在'eval'中執行。你真的嘗試過嗎? – 2010-07-03 12:25:37
- 1. 在Scrapy響應中執行內嵌JavaScript
- 2. 在Rails 4中不執行Ajax響應
- 3. 在AJAX響應中執行AJAX腳本
- 4. 響應後執行方法
- 5. format.js響應不執行
- 6. PHP沒有響應執行
- 7. AngularJS $ http響應長執行
- 8. UITableView在執行UITapGestureRecognizer後沒有響應
- 9. 代碼在API響應之前執行
- 10. 在ajax響應後執行soundmanager2
- 11. 無法執行請求 - 響應
- 12. 發送http響應後執行Java
- 13. 執行讀卡器沒有響應
- 14. Rails 3.0.9未執行Ajax響應
- 15. 執行代碼HTTP響應發送
- 16. PHP服務器響應於執行
- 17. 從AJAX執行Javascript函數 - HTML響應
- 18. 響應執行操作插入
- 19. 從遠程執行得到響應.exe
- 20. HTML ajax響應不執行JavaScript功能
- 21. 執行過程與垂直響應API
- 22. 執行代碼2 API調用響應
- 23. Excel執行循環時停止響應
- 24. 如何得到shell執行的響應
- 25. 未執行Rails 3 Ajax響應
- 26. 暫停執行,直到給出響應
- 27. Ajax響應PHP延遲執行?
- 28. 在Chrome擴展中收到響應後執行腳本
- 29. 如何在Ajax中執行JavaScript函數()響應
- 30. LoadRunner是否在響應頁面中支持JavaScript執行?
好吧,我已經找到一種方法來做到這一點,但它有點難看,所以我離開了這個問題打開 – fabjoa 2010-06-28 01:20:41