我需要向iframe发送一个值.
iframe存在于当前窗口中.我怎样才能做到这一点?
我需要在包含iframe的父窗口中使用javascript.
首先,您需要了解您有两个文档:框架和容器(包含框架).
从容器操纵框架的主要障碍是框架异步加载.您不能随时访问它,您必须知道它何时完成加载.所以你需要一个技巧.通常的解决方案是window.parent
在框架中使用"向上"(进入包含iframe
标签的文档).
现在,您可以调用容器文档中的任何方法.这种方法可以操作框架(例如调用一些JavaScript代码在你需要的参数框架).要知道何时调用该方法,您有两种选择:
从frame.onload框架中调用它.
将一个脚本元素作为最后一个东西放入框架的HTML内容中,您可以在其中调用容器的方法(左侧作为读者的练习).
所以框架看起来像这样:
...
像这样的容器:
取决于您的具体情况,但如果在页面的其余部分加载后可以部署iframe ,您只需使用查询字符串,即:
然后在some_page.html的某个地方:
这是另一种解决方案,如果帧来自不同的域,则可以使用.
var frame = /*the iframe DOM object*/;
frame.contentWindow.postMessage({call:'sendValue', value: /*value*/}, /*frame domain url or '*'*/);
在框架本身:
window.addEventListener('message', function(event) {
var origin = event.origin || event.originalEvent.origin; // For Chrome, the origin property is in the event.originalEvent object.
if (origin !== /*the container's domain url*/)
return;
if (typeof event.data == 'object' && event.data.call=='sendValue') {
// Do something with event.data.value;
}
}, false);
但是,不知道哪些浏览器支持此功能.
使用frames集合.
从链接:
var frames = window.frames; // or // var frames = window.parent.frames; for (var i = 0; i < frames.length; i++) { // do something with each subframe as frames[i] frames[i].document.body.style.background = "red"; }
如果iframe有名称,您还可以执行以下操作:
window.frames['ponies'].number_of_ponies = 7;
只有在同一个域中提供两个页面时,才能执行此操作.
还有两个选项,它们不是最优雅但可能更容易理解和实现,特别是在iframe需要的数据只是几个变量而不是复杂对象的情况下:
使用URL片段标识符(#)
在容器中:
在iFrame中:
使用iFrame的名称
(我不喜欢这个解决方案 - 它滥用了name属性,但它是一个选项,所以我提到它的记录)
在容器中:
在iFrame中: