Javascript NS\u错误\u XPC\u错误\u转换\u JS与document.write

Javascript NS\u错误\u XPC\u错误\u转换\u JS与document.write,javascript,function,document.write,script-tag,Javascript,Function,Document.write,Script Tag,我正在引入一个第三方JavaScript文件,该文件使用了document.write,但是所写的内容需要被操作——最好是在它进入页面之前。我得出的结论如下: // Hijack document.write to buffer all output... var dwrite = document.write; var hijacked = ''; document.write = function(content) { hijacked += content; }; // Call th

我正在引入一个第三方JavaScript文件,该文件使用了
document.write
,但是所写的内容需要被操作——最好是在它进入页面之前。我得出的结论如下:

// Hijack document.write to buffer all output...
var dwrite = document.write;
var hijacked = '';
document.write = function(content) {
  hijacked += content;
};
// Call the script...
dwrite("<script type='text/javascript' src='http://www.example.com/file.js'></script>");
// Manipulate the output...
hijacked
  .replace(/a/gi, '4')
  .replace(/e/gi, '3')
  .replace(/i/gi, '1')
  .replace(/o/gi, '0');
// Write the output into the page...
dwrite(hijacked);
// Restore document.write and free our buffer...
document.write = dwrite;
hijacked = null;
//劫持文档。写入以缓冲所有输出。。。
var dwrite=document.write;
var劫持=“”;
document.write=函数(内容){
劫持+=内容;
};
//调用脚本。。。
数据写入(“”);
//操纵输出。。。
劫持
.替换(/a/gi,“4”)
.替换(/e/gi,“3”)
.替换(/i/gi,“1”)
.替换(/o/gi,'0');
//将输出写入页面。。。
德怀特(劫持);
//还原文档。写入并释放缓冲区。。。
document.write=dwrite;
劫持=空;
这样,无论我在哪里调用
dwrite
,都会得到NS\u ERROR\u XPC\u BAD\u CONVERT\u JS。有人能就为什么会发生这种情况提出建议吗?我不明白为什么调用document.write通过另一个名称会爆炸

更新我在Firefox 4.0.1中看到了这一点



我试过这个,效果很好。基本上我替换了document.write,在使用它之后

document.write(""
  + "<script>"
  + "var hijacked = '';"
  + "var dw = document.write;"
  + "document.write = function(content) { hijacked += content; }"
  + "<" + "/script>"

  + "<script type='text/javascript' src='test.js'><" + "/script>"

  + "<script>"
  + "document.write = dw;"
  + "dw = null;"
  + "document.write(hijacked.replace(/e/gi, '4'));"
  + "<" + "/script>");
document.write(“)
+ ""
+“var jacked=”
+“var dw=文档。写入;”
+“document.write=函数(内容){hijacked+=content;}”
+ ""
+ ""
+ ""
+“document.write=dw;”
+“dw=null;”
+“document.write(jacked.replace(/e/gi,'4'));”
+ "");

您在哪个浏览器中进行了测试?我应该在我的帖子中提到这一点。我试过这样做——在调用.js文件之后,将后处理逻辑移动到它自己的脚本标记中,它似乎做到了这一点。很好的调用-我认为转换代码是在外部.js完全处理之前运行的。