iframe通过js两个页面传参

最近碰到个问题, 要在Iframe之间传值和数据, 因为页面对像的不同, 一个ifram页面中的form值和数据直接get或Post都是传不到另一个iframe页面的, 设置taget也没有用,  在网上找了很久 没有很好的方法. 只有通过js来实现. 

   两个重要的javascript语句:

top.result.document.location='result.html?data=' + data;

和

window.top.frames['result'].document.getElementById("an").innerHTML=data;

都很好理解,  第一个就是js重新载入父窗口中name为result的iframe页面,  第二个就是直接通过选择另一个iframe中的元素来赋值.


下面是一个传值的例子

框架页面-index.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>框架页面</title>  
</head>
<body>
<iframe width="100%" height="100" name="find" id="find" src="find.html"></iframe>
<iframe width="100%" height="600" name="result" id="result" src="result.html"></iframe>
</body>
</html>
 

查询页面-find.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>查询页面</title>
<script language="javascript"  type="text/javascript">
function show(){
var data = document.form1.data.value;  
top.result.document.location='result.html?data=' + data;
//window.top.frames['result'].document.getElementById("an").innerHTML=data;
}
</script>
</head>
<body>
<div >
  <form name="form1" method="post" >
        <p><span>数据:</span>
          <input type="text" name="data" class="text" id="text1"/>
        </p>
        <p>
     <input   type="submit" value="提交" οnclick="javascript:show();" /> 
        </p>
  </form>
</div>
</body>
</html>

结果页面-result.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>结果页面</title>
</head>
<body>
<p>上面输入的文字是: <span id="an"> </span></p>
</body>
<script language="javascript"  type="text/javascript">
function Request(argname)
{
    var url = document.location.href;
    var arrStr = url.substring(url.indexOf("?")+1).split("&");
    //return arrStr;
    for(var i =0;i<arrStr.length;i++)
        {
        var loc = arrStr[i].indexOf(argname+"=");
        
        if(loc!=-1)
            {
            return arrStr[i].replace(argname+"=","").replace("?","");
            break;
            }
        }
    return "";
}
//使用Request("argname")即可得到参数值; 
var data=Request("data");  
this.document.getElementById('an').innerHTML= data;
</script>
</html>
 
今天遇到的是jsp中,不能重复实例类的方法时,只能通过参数来改变数据。所以通过这个方法可以不重复实例。很给力啊 
### 使用 iframe 进行参数传递的方法 在 HTML 中使用 `iframe` 嵌入其他网页时,可以通过 URL 参数或 JavaScript 来实现父页面与子页面之间的数据传递。 #### 方法一:通过 URL 查询字符串传递参数 可以在设置 `iframe` 的 `src` 属性时,在目标 URL 后面附加查询字符串来向嵌入的页面传递参数。例如: ```html <iframe id="childFrame" src="frame.html?param1=value1&param2=value2" width="500" height="300"></iframe> ``` 这样做的好处是可以让接收方直接从地址栏获取所需的信息[^2]。 #### 方法二:利用 postMessage API 实现双向通信 对于更复杂的数据交换需求,则可以借助于浏览器提供的跨文档消息机制——postMessage() 函数来进行安全有效的通讯操作。下面是一个简单的例子展示如何发送以及监听来自不同源的消息事件: ##### 发送者(即包含 iframe 的主页面) ```javascript // 获取到要与其交流的目标框架对象 var childIframe = document.getElementById('childFrame'); function sendMessageToChild(message){ // 调用 contentWindow.postMessage 方法并向指定窗口发送信息 childIframe.contentWindow.postMessage({type:'greeting',text:message},'*'); } ``` ##### 接收者(即被加载进 iframe 内部的内容页) ```javascript window.addEventListener('message',(event)=>{ console.log(`收到消息: ${JSON.stringify(event.data)}`); if (event.origin !== 'http://example.com') { return; } switch(event.data.type){ case 'greeting': alert(`你好,${event.data.text}!`); break; default: console.warn('未知类型的消息.'); } }); ``` 这种方法不仅限定了双方之间能够互相理解并处理特定格式的数据包,而且还可以严格控制哪些站点允许建立联系,从而提高了安全性[^1]。 #### 方法三:修改 DOM 或调用方法 如果两个页面同域的话,那么可以直接访问对方的 window 对象及其属性/函数。比如在一个页面里定义好某些公开接口供另一个页面调用;或者是改变某个共享变量的状态等等。不过需要注意的是这样做可能会带来潜在的安全风险,因此建议谨慎采用此方式。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值