document.write会导致谷歌Chrome的奇怪行为

时间:2013-04-14 15:36:44

标签: javascript google-chrome

[问题]

使用以下JS在同一页面上消除其他JS内容(facebook Like按钮)。 (仅限Google Chrome) 这个错误是由JS。

引起的

[问题]

为什么会发生错误? 这个解决方案是对的吗? 如果您有任何想法,可以告诉我吗?

我试图使“text”具有document.write()部分而没有document.open()和document.close()。 但是,它并没有导致其他JS内容消失。

[目标代码]

这个javascript在iframe中执行。 然后,iframe将以iframe输出。

View.prototype.make_iframe = function(id, text) {
  var doc, iframe, isIE;
  iframe = document.createElement("iframe");
  iframe.width = 0;
  iframe.height = 0;
  iframe.id = id;
  document.body.appendChild(iframe);
  doc = iframe.contentWindow.document;
  /* Problem part start */
  doc.write("<html><head></head><body>");
  doc.write(text);
  doc.write("</body></html>");
  /* Problem part end */
};


 View.prototype.get_tag_files = function(dir, fname, data, make_iframe) {
  var xmlObj;
  xmlObj = null;
  if (window.ActiveXObject) {
    xmlObj = new ActiveXObject("Msxml2.XMLHTTP");
  } else {
    xmlObj = new XMLHttpRequest();
  }
  xmlObj.onreadystatechange = function() {
    var i, item, tag, text, _i, _len;
    if (xmlObj.readyState === 4 && xmlObj.status === 200) {
      text = xmlObj.responseText;
      tag = new Tag(data, text);
      tag.replace();
      return make_iframe(fname, tag.get_tag());
    }
  };
  xmlObj.open("GET", dir + fname, true);
  return xmlObj.send(null);
};

[解决]

  /* target part */
  doc.write("<html><head></head><body>");
  doc.write(text);
  doc.write("</body></html>");

  ==>

  /* replaced target part */
  isIE = /MSIE/.test(window.navigator.userAgent);
  if (!isIE) {
    doc.clear();
    doc.open;
  }
  doc.write("<html><head></head><body>");
  doc.write(text);
  doc.write("</body></html>");
  if (!isIE) {
    return doc.close();
  } else {
    return;
  }

致:第一位评论者

感谢您的回复。

我尝试使用appendChild函数。 但是,它不起作用。 “text”变量有一些HTML和JS标记,可以从其他服务器获取数据。 当我使用appendChild而不是document.write函数时, 标签无法通过网络与其他服务器通信。 我不知道原因。

此代码由coffee脚本编译器生成。 而咖啡脚本代码具有视图类,因此代码具有原型。 原始代码(咖啡脚本)紧随其后。

Tag = require("../src/tag").Tag

class View
    constructor: (data) ->
        @validated = data
        @viewid = "product"

    make_iframe: (id,text) ->
        iframe = document.createElement("iframe")
        iframe.width = 0
        iframe.height = 0
        iframe.id = id
        document.body.appendChild(iframe)
        doc = iframe.contentWindow.document
        isIE = /MSIE/.test(window.navigator.userAgent)

        if !isIE
            doc.clear()
            doc.open
        doc.write("<html><head></head><body>")
        doc.write(text)
        doc.write("</body></html>")
        if !isIE
            return doc.close()
        else
            return

    get_tag_files: (dir,fname,data,make_iframe) ->
        xmlObj = null
        if window.ActiveXObject
            xmlObj = new ActiveXObject("Msxml2.XMLHTTP")
        else
            xmlObj = new XMLHttpRequest()
            xmlObj.onreadystatechange = ->
            if xmlObj.readyState == 4 && xmlObj.status == 200
                text = xmlObj.responseText
                tag = new Tag(data, text)
                tag.replace()
                make_iframe(fname,tag.get_tag())
            xmlObj.open("GET", dir+fname, true)
            xmlObj.send(null)

    output_tags: (tags, path) ->
        for tag in tags
            @get_tag_files(path, tag, @validated, @make_iframe)

        return """
               """

exports.View = View

0 个答案:

没有答案