簡體   English   中英

IE中的Javascript HTML和腳本注入問題

[英]Javascript HTML and Script injection issue in IE

我有一個JavaScript變量,其中包含轉義的HTML。 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中遇到另一個問題。 我將注入腳本更改為:(仍然無法在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中完美運行。

我認為您需要改用document.write。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM