【问题标题】:Pass values into iframe not using GET不使用 GET 将值传递到 iframe
【发布时间】:2011-05-04 20:22:56
【问题描述】:

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

【问题讨论】:

    标签: javascript html post get


    【解决方案1】:

    在 iframe 中使用 window.parent

    在父窗口中:

    window.passingObj = { "key" : "value" };
    

    在 iframe 中:

    alert(window.parent.passingObj["key"]); // value
    

    【讨论】:

      【解决方案2】:

      两个有用的帖子:

      iframe accessing parent DOM?(iframe 到父级)

      Invoking JavaScript code in an iframe from the parent page(iframe 的父级)

      【讨论】:

        【解决方案3】:

        如果您只需要在 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
        

        【讨论】:

          【解决方案4】:

          如果两个页面在同一个域中,您可以使用 iframe 访问容器页面中定义的变量

          parent.varName
          

          【讨论】:

            【解决方案5】:

            您可以使用 iframe 的父窗口中的变量和方法,只需使用 parent 对象;例如,如果您在父窗口中有这个:

            var someObject = {key1:'value1' , key2:'value2'};
            function test(key)
            {
                alert(someObject[key]);
            }
            

            您可以在子 iframe 中执行此操作:

            parent.test('key1');
            alert(parent.someObject.key2);
            

            请记住,只有 iframe 及其父级属于同一域时才有可能 (同源政策)。

            【讨论】:

              【解决方案6】:

              对于你所说的,我认为你不想使用 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;
              }
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2017-09-06
                • 2016-10-12
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多