當在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. 代碼在API響應之前執行
- 7. 從AJAX執行Javascript函數 - HTML響應
- 8. 如何得到shell執行的響應
- 9. Ajax響應PHP延遲執行?
- 10. 執行代碼HTTP響應發送
- 11. PHP服務器響應於執行
- 12. 執行代碼2 API調用響應
- 13. Excel執行循環時停止響應
- 14. 無法執行請求 - 響應
- 15. Rails 3.0.9未執行Ajax響應
- 16. JavaScript未在Ajax響應文本中執行
- 17. 如何在Ajax中執行JavaScript函數()響應
- 18. 在Chrome擴展中收到響應後執行腳本
- 19. 瀏覽器如何在rails中執行AJAX響應?
- 20. 如何在金字塔中完成響應後執行方法?
- 21. 在Sinatra測試響應中訪問執行官登錄信息
- 22. 如何在JavaEE中響應後執行代碼
- 23. 如何在Express.js中發送響應後執行某些操作?
- 24. 如何在Dojo中執行JS XHR響應?
- 25. 在Sequelize catch處理程序中未執行的快速響應
- 26. 如何運行API調用並在c#中並行執行它們的響應?
- 27. 通過在批處理文件中執行命令獲取多行響應?
- 28. 在scrapy中的Json響應中爬行
- 29. 如何在等待UIAlertView響應時暫停代碼執行?
- 30. 在節點執行回調響應無法正常工作
好吧,我已經找到一種方法來做到這一點,但它有點難看,所以我離開了這個問題打開 – fabjoa 2010-06-28 01:20:41