IE 中的 Javascript HTML 和脚本注入(inject)问题

标签 javascript

我有一个包含转义 HTML 的 javascript 变量。 HTML 中可以有脚本标签,如下所示:

var valueToInsert = "%3Cscript%20type%3D%22text/javascript%22%3Ealert%28%27test%27%29%3B%3C/script%3E%0A%3Cscript%20type%3D%22text/javascript%22%20src%3D%22http%3A//devserver/testinclude.js%22%3E%3C/script%3E%0A%3Cimg%20src%3D%22http%3A//www.footballpictures.net/data/media/131/manchester_united_logo.jpg%22%20/%3E"

我想将其附加到 DOM,并按预期触发所有 javascript。现在我正在使用这种方法:

var div = document.createElement("div");
div.innerHTML = unescape(valueToInsert);
document.body.appendChild(div);

在 IE 中,当时我设置了 div.innerHTML - 所有脚本标签都被删除了。

如果我使用 jQuery 来执行此操作:

$(document.body).append(valueToInsert)

一切正常。糟糕的是,我无法使用 jQuery,因为此代码将添加到我无法控制的网站,其中包含一些“已实现”的脚本。

有人有窍门吗?如果 jQuery 可以做到,那一定是可能的?

我在 Opera 中遇到了另一个问题。我将注入(inject)脚本更改为:(在 IE 中仍然不起作用)

    var div = document.createElement("div");
    div.innerHTML = unescape(valueToInsert);
    var a = new Array();

    for (var i = 0; i < div.childNodes.length; i++)
        a.push(div.childNodes[i]);

    for (var i = 0; i < a.length; i++)
    {
        if (a[i].nodeName == "SCRIPT" && a[i].getAttribute("src") != null && a[i].getAttribute("src") != "" && typeof (a[i].getAttribute("src")) != "undefined")
        {
            var scriptTag = document.createElement("script");
            scriptTag.src = a[i].getAttribute("src");
            scriptTag.type = "text/javascript";
            document.body.appendChild(scriptTag);
        }
        else if (a[i].nodeName == "SCRIPT")
        {
            eval(a[i].innerHTML);
        }
        else
        {
            document.body.appendChild(a[i]);
        }
    }

最佳答案

在分析了 jQuery 做了什么之后,我看到他们在前面添加了一些虚拟文本并再次将其删除:

var div = document.createElement("div");
div.innerHTML = "removeMe" + unescape(valueToInsert);
div.removeChild(div.childNodes[0]);
document.body.appendChild(div);

这在 FF、IE、Chrome、Opera 和 Safari 中完美运行。

关于IE 中的 Javascript HTML 和脚本注入(inject)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2667484/

相关文章:

javascript - Jquery 从 div 部分追加文本

javascript - 使用 window.frames 属性获取 iframe 与 iframe ID

javascript - 根据一定的时间延迟执行函数并忽略其他函数的执行

Javascript-图遍历-返回最短路径

php - while( var 行 = fn() );

javascript - Div 以打开/关闭它的显示,但能够单击输入

javascript - 未捕获的类型错误 : Object user has no method ‘_create’

javascript - 使用CSS定位元素

javascript - 支持 IE Javascript/Jquery/Html5 的拖放下载

javascript - 模拟登录页面中的按钮单击