我有一个iframe,我正在使用带有一些vars的url正式创建,我将其作为GET传递。是否可以设置源页面并将变量作为POST或其他内容传递?或者真的,如果有可能以某种方式获得存储在父母中的变量,那么我也可以这样做。
答案 0 :(得分:5)
在iframe中使用window.parent
。
在父窗口中:
window.passingObj = { "key" : "value" };
在iframe中:
alert(window.parent.passingObj["key"]); // value
答案 1 :(得分:1)
两个有用的帖子:
iframe accessing parent DOM?(iframe为父母)
Invoking JavaScript code in an iframe from the parent page(iframe的父级)
答案 2 :(得分:0)
如果您只需要在javascript中访问,那么您可以使用hash
。
iframe.src="http://foo.bar/#arg1=1&arg2=2";
然后在页面中,您只需从location.hash.substring(1)
中提取它们。
这是用于将这些args变为“地图”的样板代码:
(来自我的图书馆easyXDM)
var query = (function(input){
input = input.substring(1).split("&");
var data = {}, pair, i = input.length;
while (i--) {
pair = input[i].split("=");
data[pair[0]] = decodeURIComponent(pair[1]);
}
return data;
}(location.hash);
query.arg1; // 1
query.arg2; // 2
答案 3 :(得分:0)
如果两个页面都在同一个域中,您可以使用
访问iframe中容器页面中定义的变量parent.varName
答案 4 :(得分:0)
您只需使用父对象,即可使用iframe父窗口中的变量和方法;例如,如果你在父窗口中有这个:
var someObject = {key1:'value1' , key2:'value2'};
function test(key)
{
alert(someObject[key]);
}
你可以在子iframe中执行此操作:
parent.test('key1');
alert(parent.someObject.key2);
请注意,只有iframe及其父级属于同一个域才有可能 (同源政策)。
答案 5 :(得分:0)
对于你所说的我收集你不想使用网址传递你的参数。
根据javascript的执行位置,您有以下选项:
如果在容器窗口中执行,您可以执行类似这样的操作
...
var el = document.getElementById('targetFrameId');
getIframeWindow(el).someFunction('value1', 'value2', ...);
// or
getIframeWindow(el).someVariable = {key1:'value1', key2:'value2', ...};
...
如果在iframe窗口中执行,您可以执行类似
的操作... window.parent.something ... ;
翼
function getIframeWindow(iframe_object) {
var doc;
if (iframe_object.contentWindow) {
return iframe_object.contentWindow;
}
if (iframe_object.window) {
return iframe_object.window;
}
if (!doc && iframe_object.contentDocument) {
doc = iframe_object.contentDocument;
}
if (!doc && iframe_object.document) {
doc = iframe_object.document;
}
if (doc && doc.defaultView) {
return doc.defaultView;
}
if (doc && doc.parentWindow) {
return doc.parentWindow;
}
return undefined;
}