2

我有一个包含2 个 iframe的页面,我想知道是否可以在影响 iframe 的父窗口中有一个链接。

我知道如何创建一个普通链接来更改 iframe 中的页面,但我需要让我将 JavaScript 激活到 iframe 中。

// The JS | normally in one line
javascript:var%20KICKASSVERSION='2.0';
var%20s%20=%20document.createElement('script');
s.type='text/javascript';document.body.appendChild(s);
s.src='//hi.kickassapp.com/kickass.js';
void(0);

如果您将其放入地址栏中,它可以在不更改页面的情况下工作,但我想知道这是否可以在 iframe 中实现。谢谢!

4

2 回答 2

1

HTML iframe 具有允许您操作 iframe 的内部文档的contentDocument属性(请参阅iframe 上的 MDN 页面)。

粗略的指导方针(未经测试,但你明白了:)):

var iframe = document.querySelector("iframe");
iframe.contentDocument.location.href = "..."; // change the inner iframe's location
iframe.contentDocument.body.appendChild(yourScriptNode); // append a script inside the iframe
于 2012-05-26T15:48:01.733 回答
1

查看您的代码,最简单的方法是执行以下操作:

var iframe=/*DOM REFERENCE TO YOUR IFRAME, for example:*/document.getElementById('myIframe');
iframe.src="javascript:var%20KICKASSVERSION='2.0';var%20s%20=%20document.createElement('script');s.type='text/javascript';document.body.appendChild(s);s.src='//hi.kickassapp.com/kickass.js';void(0);";

但是,更干净的方法是:

var myLink=document.getElementById('myLink');

myLink.addEventListener('click',function(evt){
 var myFrame=document.getElementById('myFrame');
 var win=myFrame.contentWindow;

 win.KICKASSVERSION='2.0';
 var s = win.document.createElement('script');
 s.type='text/javascript';win.document.body.appendChild(s);
 s.src='//hi.kickassapp.com/kickass.js';

 evt.preventDefault();
}

请注意,在所有情况下都执行相同的来源策略

于 2012-05-26T15:52:47.750 回答