2010-04-16 117 views
0

我能够获得以下JS来创建IFRAME并将其添加到页面。如何在url中插入javascript代码以在现有页面中插入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

一些变化为什么你想用'location.href'做到这一点?关于你想要实现什么的一些背景将会有所帮助 - 在location.href中使用“javascript:”没有什么意义,但也许我错过了某些东西 - 所以详细说明会很有用... – Graza 2010-04-19 17:34:04

+0

为什么不只是直接执行该代码?没有必要(基于我们可以看到的),你不能只使用javascript:指令添加框架w/o – 2010-04-26 03:42:45

+0

这完全是恶意代码注入的尖叫。 – 2010-04-26 13:34:12

回答

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

假设字符串保存在变量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); 
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,但实际上通过键入/粘贴到地址栏,或创建书签......我用于在网址栏中输入javascript时碰到很多...)

无论如何,关键要注意的是,如果您将位置(通过这三种方法中的任何一种)设置为JavaScript网址,最后一个语句返回一些内容,文档主体被设置为该对象。在你的代码中,最后一行是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');";