不使用GET将值传递到iframe

时间:2011-05-04 20:22:57

标签: javascript html post get

我有一个iframe,我正在使用带有一些vars的url正式创建,我将其作为GET传递。是否可以设置源页面并将变量作为POST或其他内容传递?或者真的,如果有可能以某种方式获得存储在父母中的变量,那么我也可以这样做。

6 个答案:

答案 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;
}