带有document.write的NS_ERROR_XPC_BAD_CONVERT_JS

时间:2011-06-07 14:17:11

标签: 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 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;

有了这个,我在尝试呼叫dwrite的任何地方都得到了NS_ERROR_XPC_BAD_CONVERT_JS。任何人都可以提出为什么会发生这种情况的建议吗?我不明白为什么通过不同的名称调用document.write会爆炸。

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


1 个答案:

答案 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>");