繁体   English   中英

如何在网址中注入javascript代码以在现有页面中插入iframe

[英]how to inject javascript code in url to insert iframe in existing page

我可以获取以下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);";

您必须将其包装在函数中...

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);

凯西说了什么...或者您可以输入“ void 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来完成此操作,而是实际上通过在网址栏中输入/粘贴或创建书签的方式来实现。。。我过去在网址栏中输入javascript时经常遇到这种情况。 ..)

无论如何,要注意的关键是,如果将位置(通过这三种方法中的任何一种)设置为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');";

假设字符串保存在变量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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM