如何在url中插入javascript代码以在现有页面中插入iframe

时间:2010-04-16 13:33:43

标签: javascript

我能够获得以下JS来创建IFRAME并将其添加到页面中。

问题是如果我在页面上创建JS方法并在按钮上单击它就可以正常工作。 但是当我尝试通过设置location.href将相同的JS注入页面URL时,它无法以正确的方式工作,而是用新的iframe替换现有页面。

这是我的代码:

location.href = "javascript:ifrm = document.createElement('IFRAME');ifrm.style.width = 60+'px';ifrm.style.height = 40+'px';document.body.appendChild(ifrm);";

3 个答案:

答案 0 :(得分:5)

你必须将它包装在一个函数中......

location.href = "javascript:(function () {ifrm = document.createElement('IFRAME');ifrm.style.width = 60+'px';ifrm.style.height = 40+'px';document.body.appendChild(ifrm);})()";

...虽然您可以简单地用实际代码替换location.href更改:

ifrm = document.createElement('IFRAME');
ifrm.style.width = 60+'px';
ifrm.style.height = 40+'px';
document.body.appendChild(ifrm);

答案 1 :(得分:4)

Casey说了什么......或者你可以说“无效0”;在剧本的最后......

location.href = "javascript:ifrm = document.createElement('IFRAME');ifrm.style.width = 60+'px';ifrm.style.height = 40+'px';document.body.appendChild(ifrm); void 0;";

(我假设你实际上并没有用location.href做这个,但实际上是通过输入/粘贴到url栏,或者创建一个bookmarklet ...当我在javascript中输入javascript时,我经常会遇到这种情况。 url bar ...)

无论如何,要注意的关键是如果你将位置(通过这三种方法中的任何一种)设置为javascript url,并且最后一个语句返回一些内容,则将文档正文设置为该对象。在您的代码中,最后一行是document.body.appendChild(ifrm)appendChild()返回ifrm对象。在我建议的答案中,最后一个语句是空的,因此文档正文不会被替换。在Casey的建议中,函数没有return语句,因此它是一个void函数,文档体也没有被替换。

要了解正在发生的事情,请尝试以下方法:

location.href = "javascript:ifrm = document.createElement('IFRAME');ifrm.style.width = 60+'px';ifrm.style.height = 40+'px';document.body.appendChild(ifrm); 'Hello world';";

或结果的某些变化

location.href = "javascript:ifrm = document.createElement('IFRAME');ifrm.style.width = 60+'px';ifrm.style.height = 40+'px';document.body.appendChild(ifrm); confirm('Pick one');";

答案 2 :(得分:1)

假设字符串保存在变量mystring中:

方法1

eval( mystring.replace("javascript:", "") );

方法2 (如果您想保留"javascript:"):

function clickLink(link) {
    var cancelled = false;

    if (document.createEvent) {
        var event = document.createEvent("MouseEvents");
        event.initMouseEvent("click", true, true, window,
            0, 0, 0, 0, 0,
            false, false, false, false,
            0, null);
        cancelled = !link.dispatchEvent(event);
    }
    else if (link.fireEvent) {
        cancelled = !link.fireEvent("onclick");
    }

    if (!cancelled) {
        window.location = link.href;
    }
}

var link = document.createElement("a");
link.src = mystring;

clickLink(link);