将JavaScript值传递到iframe标签中

7
什么是将javascript变量中保存的值传递到同一html页面上iframe调用的最佳方法?我正在尝试通过将广告服务javascript代码(典型的document.write('<script type="text/javascript" src="..")移动到单独的iframe中来提高网站的页面响应时间。(根据此帖子
通常,对广告服务器的请求需要在每个站点上声明一次种子变量,并在客户端加载页面时递增。我想做的是将种子变量传递到由我的iframe部分调用的文档中。
种子变量在我的主html文档的“head”标签中初始化:
<head>
    <script type="text/javascript">
    <!--
    custom_seed=1;  
    //-->
    </script>
</head>

在HTML文档的后面,我通过一个iframe发出请求,该请求返回调用广告服务器所需的HTML代码。
<body>
<!-- a bunch of html to display the page -->
<iframe src="somepage.html" width="100%" height="100%">
<p>No support for iframe</p>
</iframe>
</body>

在“somepage.html”返回的HTML中,有一个脚本用于调用广告服务器,并需要使用之前声明的种子变量作为参数:
<script type="text/javascript">
    document.write('<script type="text/javascript" src="http://ad.server.net/...seed='+ custom_seed  +'?"></script>');
    custom_seed++;
    </script>

有什么好的方法可以实现这个?

3个回答

12

唯一的方法,可以直接将值传递到不同域名页面的iframe中,是通过url作为查询字符串值、锚点或可能的某种重写方式。即使在相同的域名上,这也可能是最简单和最安全的传递方式。

主文档:

document.getElementById('IframeID').src = "somepage.html?seed=" + custom_seed;

内部文档:

var seed = window.location.search.substring(window.location.search.indexOf('seed=') + 5);
if (seed.indexOf('&') >= 0) {
    seed = seed.substring(0, seed.indexOf('&'));
}

我该如何将iframe中存在的值传递到URL中?如果iframe请求的资源具有信息,则在构建最终请求广告服务器时,服务器可以利用该信息。 - Cedar Jensen
@Cedar,我添加了一些示例代码,但我还没有调试它。您还需要为IFrame添加一个ID,以便在JavaScript中获取它。 - tloflin
谢谢您的建议。在文档加载/渲染过程的哪个阶段,您会动态更新iframe的URL并传入custom_seed值?随着页面的加载和一旦到达<iframe>部分,它的URL将被调用,所以您是否有时间监听document.ready事件(通过jQuery)? - Cedar Jensen
@Cedar,给src属性赋值会导致iframe刷新。我会将其原始值设置为虚拟URL,以避免对该页面进行两次访问。除此之外,在iframe加载完成后,你可以在javascript中的任何位置设置它。 - tloflin
3
你声称无法直接向IFrame发送消息。这是不正确的。你可以通过window.postMessage传递信息。请参见https://developer.mozilla.org/en-US/docs/DOM/window.postMessage。 - dave
你也可以通过函数作用域传递变量,但前提是iframe在同一域名(domain)下。 - Alex W

1
这是一个巧妙的解决方案,没有丑陋的URL变量。虽然你不能将变量发送到iframe中,但可以调用一个函数来运行。
首先,在目标页面编写一个函数来接收和设置变量:
<script type="application/javascript">
    function variable(value) {
        var seed = value;
</script>

然后,您只需要从源页面调用该函数:
<script type="application/javascript">
    document.getElementById("IframeID").contentWindow.variable("value");
</script>

0
获取 iframe 文件中的值的简单方法:
  document.getElementById("youfiled").value="";

并在逗号元素内使用echo php $_GET['seed'];


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接