【发布时间】:2011-05-04 20:22:56
【问题描述】:
我有一个 iframe,我正在使用一个带有一些变量的 url 正式创建,这些变量是我作为 GET 传入的。是否可以设置源页面并将变量作为 POST 或其他方式传递?或者说真的,如果有可能以某种方式获取存储在父级中的变量,我也可以这样做。
【问题讨论】:
标签: javascript html post get
我有一个 iframe,我正在使用一个带有一些变量的 url 正式创建,这些变量是我作为 GET 传入的。是否可以设置源页面并将变量作为 POST 或其他方式传递?或者说真的,如果有可能以某种方式获取存储在父级中的变量,我也可以这样做。
【问题讨论】:
标签: javascript html post get
在 iframe 中使用 window.parent。
在父窗口中:
window.passingObj = { "key" : "value" };
在 iframe 中:
alert(window.parent.passingObj["key"]); // value
【讨论】:
两个有用的帖子:
iframe accessing parent DOM?(iframe 到父级)
Invoking JavaScript code in an iframe from the parent page(iframe 的父级)
【讨论】:
如果您只需要在 javascript 中访问,那么您可以使用 hash。
iframe.src="http://foo.bar/#arg1=1&arg2=2";
然后在页面中您只需从location.hash.substring(1) 中提取它们。
这是将这些参数放入“地图”的样板代码:
(来自我的图书馆 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
【讨论】:
如果两个页面在同一个域中,您可以使用 iframe 访问容器页面中定义的变量
parent.varName
【讨论】:
您可以使用 iframe 的父窗口中的变量和方法,只需使用 parent 对象;例如,如果您在父窗口中有这个:
var someObject = {key1:'value1' , key2:'value2'};
function test(key)
{
alert(someObject[key]);
}
您可以在子 iframe 中执行此操作:
parent.test('key1');
alert(parent.someObject.key2);
请记住,只有 iframe 及其父级属于同一域时才有可能 (同源政策)。
【讨论】:
对于你所说的,我认为你不想使用 url 来传递你的参数。
根据 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;
}
【讨论】: