在responseHTML中执行JavaScript

在responseHTML中执行JavaScript,javascript,ajax,xmlhttprequest,Javascript,Ajax,Xmlhttprequest,在XHR中使用responseHTML时,Firefox会在加载的responseHTML中执行Java脚本,chromium则不会。如果我添加一个脚本来解析和执行这些脚本,它将在chromium上工作,但它们会在Firefox中执行两次。除了通过代理嗅探,你知道浏览器是否会执行加载的脚本吗?PS:我使用的是一个JS框架,它不是jQuery或Prototype,也不是任何东西。测试。我不记得Mozilla启动脚本的确切机制,但应该可以制作一个内部测试,检测是否启动了脚本,然后进行相应的修补。不要

在XHR中使用responseHTML时,Firefox会在加载的responseHTML中执行Java脚本,chromium则不会。如果我添加一个脚本来解析和执行这些脚本,它将在chromium上工作,但它们会在Firefox中执行两次。除了通过代理嗅探,你知道浏览器是否会执行加载的脚本吗?PS:我使用的是一个JS框架,它不是jQuery或Prototype,也不是任何东西。测试。我不记得Mozilla启动脚本的确切机制,但应该可以制作一个内部测试,检测是否启动了脚本,然后进行相应的修补。

不要嗅探。测试。我不记得Mozilla启动脚本的确切机制,但应该可以制作一个内部测试来检测脚本是否启动,然后相应地进行修补。

不要使用responseHTML。改为使用响应文本,并使用以下功能。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;
       }
    });
 }
函数showHtmlineElement(targetId,htmlUrl){
var target=document.getElementById(targetId);
var Util=jaf.core.Util;
Util.ajax({
网址:htmlUrl,
数据类型:“text/html”,
// ---------------------------------------------------------------
onSuccess:函数(xhr){
var responseText=xhr.responseText;
target.innerHTML=responseText;
//收集所有脚本标记内容。。。
var scriptText=“”;
var arrScripts=target.getElementsByTagName(“脚本”);
for(变量i=0,len=arrScripts.length;i”+responseText+”:
+信息+”(“+code+”)

”; target.innerHTML=内容; } }); }

我已经测试了opera、firefox、chromium和safari。但是没有在IE6中测试。

不要使用responseHTML。改为使用响应文本,并使用以下功能。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;
       }
    });
 }
函数showHtmlineElement(targetId,htmlUrl){
var target=document.getElementById(targetId);
var Util=jaf.core.Util;
Util.ajax({
网址:htmlUrl,
数据类型:“text/html”,
// ---------------------------------------------------------------
onSuccess:函数(xhr){
var responseText=xhr.responseText;
target.innerHTML=responseText;
//收集所有脚本标记内容。。。
var scriptText=“”;
var arrScripts=target.getElementsByTagName(“脚本”);
for(变量i=0,len=arrScripts.length;i”+responseText+”:
+信息+”(“+code+”)

”; target.innerHTML=内容; } }); }

我已经测试了opera、firefox、chromium和safari。不过我还没有在IE6中测试过。

这是我第n次回答这个问题:)

//响应是从服务器返回的数据
var response=“html\alert(\“foo\”);html”;
var reScript=/\(.*)/mg;
响应=响应。替换(命令,功能(m,m1){
eval(m1);//将运行警报(“foo”);
返回“”;
});
警报(响应);//将向“htmlhtml”发出警报

这是我第n次回答这个问题:)

//响应是从服务器返回的数据
var response=“html\alert(\“foo\”);html”;
var reScript=/\(.*)/mg;
响应=响应。替换(命令,功能(m,m1){
eval(m1);//将运行警报(“foo”);
返回“”;
});
警报(响应);//将向“htmlhtml”发出警报

我在谷歌上搜索了几个小时,没有任何回应。我有点眼花缭乱,似乎是一个相当重要的x浏览器问题,虽然我已经在谷歌搜索了几个小时,但没有任何回应。我有点眼花缭乱,似乎是一个相当重要的x浏览器问题虽然我已经找到了一种方法,但它有点难看,所以我把这个问题留给大家好吧,我找到了一种方法,但它有点难看,所以我把这个问题留给大家谢谢,我会调查的。。。也在IE6上让你知道:)谢谢,伙计,我会调查的。。。同样在IE6上让你知道:)thx肖恩,但这不是我的问题。若我按照你们的建议去做,脚本将在chromium中执行一次,但在firefox中执行两次,firefox本机执行脚本。我找到了一种方法,在innerHTML中预先添加一个javascript,告诉onload脚本是否执行。这不是真的。replace在将脚本插入DOM之前删除脚本,因此它只在
eval
中执行。你真的试过这个吗?thx sean但那不是我的问题。若我按照你们的建议去做,脚本将在chromium中执行一次,但在firefox中执行两次,firefox本机执行脚本。我找到了一种方法,在innerHTML中预先添加一个javascript,告诉onload脚本是否执行。这不是真的。replace在将脚本插入DOM之前删除脚本,因此它只在
eval
中执行。你真的试过这个吗?