![](/img/trans.png)
[英]How to inject dynamic javascript code into an iframe that already exists on parent page
[英]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.