7

有没有办法在不使用查询字符串的情况下将变量从具有弹出 iframe 的 1 页传递到客户端按钮单击时的弹出窗口(iframe)?我的变量太大而无法使用查询字符串?

提出相同问题的另一种方式

有没有办法在不使用查询字符串的情况下通过客户端按钮单击将变量从一页传递到另一页?我的变量太大而无法使用查询字符串?

这是用于 IE 8 和更高版本的 html 5 存储将不起作用

4

4 回答 4

4

如果您的两个页面在同一个域中,则可以使用HTML5 LocalStorage。它是一个 JavaScript 对象,最多可以容纳大约 5MB 左右的字符串。

如果您需要存储字符串以外的其他数据,可以使用 JSON.stringify() 和 JSON.parse() 在数据类型和字符串之间进行转换。

没有 HTML5

您可以选择使用cookie并使用 JavaScript 获取/设置它们,否则有许多 LocalStorage polyfill 可供选择,它们应该能够在受限环境中工作。

于 2013-08-16T01:42:04.887 回答
1

您可以从父窗口调用存在于子窗口中的函数,并将数据从父窗口传递给子窗口。

我为这个非常基本的示例道歉,我们将变量中的任何内容dummy_txt从父窗口传递到子窗口。

父级 (parent.htm)

<html>
<body>
    <input id="btn" type='button' value='Open Window' />
    <script>

        var child_win;

        document.getElementById("btn").onclick = function () {
            child_win = window.open("child.htm");
            dummy_txt = 'blah blah blah blah blah...'
            setTimeout(function () { 
                child_win.document.write(dummy_txt); 
                // Hey, you can do child_win.my_own_function(dummy_txt)
            }, 2000);
        }

    </script>
</body>
</html>

孩子 (child.htm)

<html><body></body></html>
于 2013-08-16T01:58:31.183 回答
1

不是最干净的方法,但您也可以通过让子 iframe 通过 window.parent 调用 javascript 函数来执行类似于 Nabil 建议的操作

var myValueFromParent = window.parent.SomeFunctionOnParentFrame();

我使用这种方法不是将值从父级传递给子级,而是让子级信号父级。

于 2013-08-16T02:23:31.080 回答
1

尝试以下操作:

主页

<html>
    <head>
        <title>JS Iframe Test</title>
    </head>
    <body>      
        <iframe id="frame" src="js-test-iframe.htm"></iframe>
        <br /><br />
        <input type="text" id="toInject" /> <button id="send">Send To Iframe</button>        

        <script type="text/javascript"> 
            document.getElementById('frame').onload =  function(){  
                document.getElementById('frame').contentWindow.doSomething("Hi");                    
            }

            var btn = document.getElementById('send');

            btn.addEventListener("click", function(){
                var text = document.getElementById('toInject').value;
            
                document.getElementById('frame').contentWindow.doSomething(text);
                // window.frames[0].doSomething(text); // An alternative

            }, false);                  
        </script>
    </body>
</html>

IFrame 页面(js-test-iframe.htm)

<html>
    <head>  
        <script type="text/javascript">
            function doSomething(text)
            {
                document.getElementById('valueHere').innerHTML = text;              
            }
        </script>
    </head>
    <body>
        <div id="valueHere">Default Text</div>
    </body>
</html>



请记住,在操作或将任何变量传递给它之前,您需要等待 iframe 加载。另请注意,这仅适用于您在同一域中采购页面的情况。

于 2013-08-16T03:23:10.103 回答