我有一个将被动态插入到父页面的iframe使用下面的脚本( 我没有在这个域控制 )...
var _hf_iFrame = document.createElement("iframe");
_hf_iFrame.setAttribute("id", "_hf_iFrame");
_hf_iFrame.setAttribute("name", "_hf_iFrame");
_hf_iFrame.setAttribute("style", "height: 354px; width: 445px; border: 0; margin-left: -400px; top: 23%; position: fixed;");
document.body.appendChild(_hf_iFrame);
_hf_iFrame.setAttribute("src", "http://anotherdomain.com/frame.html");
我想从自身的IFrame改变iframe的CSS属性。 是否有可能实现这一目标? 我使用JQuery我的iframe内。
提前致谢。
你不能做到这一点。
你有两个文件。 家长和陷害。 该IFRAME元素的父中存在,所以要修改它,你需要修改父文档。
您的代码的框架文件,这是在不同的领域中运行,因此同源策略阻止你到达父文档进行修改。
不幸的是这是不可能做到这一点的跨域。 我试图操纵它在许多方面,但都失败了。 如果你有一个社区,愿意用userscripts,这可能是一种选择。 如果没有,你问是不可能的。
Userscripts
Userscripts是在JavaScript(以及可能随之而来的任何库)的脚本。 用户可以选择安装一个浏览器。 Firefox和Opera完全支持它,虽然火狐需要命名的Greasemonkey扩展。 Chrome浏览器有一个小小的例外:您需要的库和你的代码添加到文件本身如果库不在网页上的活跃。 如果是,你可以使用它像任何其他浏览器。 我不知道关于Safari和IE不支持它。
这里是userscripts信息: 点击 。 由于本指南说明:Safari浏览器与一个附加的,和IE浏览器的支持太多,但它并没有说关于IE 9/10什么。 要检查随机userscripts的想法,去userscripts.org 。
对于当域是一样的,见下文。
老答案
它可以从一个iFrame内到达顶层文件。 这是普通的JavaScript。 由于iframe是动态创建的,有可能会有更多的一个页面上。 这个脚本也得到正确的框架:
var arrFrames = parent.document.getElementsByTagName("iframe");
for (var i = 0; i < arrFrames.length; i++) {
if (arrFrames[i].contentWindow === window) alert("yay!");
{
arrFrames[i].contentWindow.style.border = "1px solid lime";
}
}
而在jQuery的:
parent.$("iframe").each(function(iel, el) {
if(el.contentWindow === window)
{
$(this).css({"border" : "1px solid lime"});
}
});
这不是我的代码。 这原来是找到这里 ,我刚才editted它的CSS部分。 接下来的时间可能会搜索多一点,因为答案是永远存在!
如果我理解正确的话,你想改变框架的风格时,有东西在里面发生。
可以将功能结合使用jQuery选择和功能。对帧中的每个元素:
$('#myFrame).contents().find('myButton').on('click',function(){
$('#myFrame).contents().find('myDiv').attr('style','background-color:red');
});
请注意,如果您要执行这个代码,该帧被加载之前,你应该使用结合了以下技术:
$('#myFrame).contents().find('myButton').on('click','#myFrame',function(){
$('#myFrame).contents().find('myDiv').attr('style','background-color:red');
});
这将在活动事件的元素不会被渲染结合。 不管怎样,我想对帧负载事件的事件绑定。
上述要求已jQuery的文档中加载。