JS iframe

     现在有这样的案例,两个页面fu.jsp,zi.jsp
 fu.jsp有很多表单元素要填写,且有很多元素需要 其他系统根据已经填写的表单元素进行处理并且返回回填到fu.jsp
 (例如要通过另外的系统来计算或者复制等返回数据)
 可以这么理解
   fu.jsp --> 请求  --> controller处理(与其他系统交互或者另外的处理) --> 返回到 fu.jsp(Struts回填)
 现在采用
   fu.jsp --> 请求  --> controller处理(与其他系统交互或者另外的处理) --> 返回到 zi.jsp(在zi.jsp只回填返回的信息)
  最后还是回到fu.jsp
  根据这个情况就可以运用iframe,在跳到 zi.jsp页面的时候,其实还是停留在fu.jsp,zi.jsp可以
  通过  parent.document.getElementById("para").value = "返回的值"; (注意para是父页面的元素)

  如果这种情况用struts返回通过property进行回写,则除了返回的信息回填之外,其他先前输入的信息也都回写了。
  如果用 iframe则就可以只回填返回的信息,之前输入的信息不用回填了

 

例子

	<form id="myForm" action="zi.html" target="aaa"><input type = "text" id = "aa" value = "100000" /><br>
		<input type="text" id = "para" />
		<input type="submit" value="提交" />
	</form>

	 这个是父亲页面
	<iframe name="aaa" height="0" width="0" marginheight="0" marginwidth="0"
		frameborder="0"></iframe>

	

 

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<script>
  
	  parent.document.getElementById("para").value = "adfadfadsf";
  
</script>
<body>
  <div id = "zidiv">zidiv</div>
   

</body>
</html>

 提交之后不会跳转,通过子页面回填父页面的信息。

### JavaScript 中与 iframe 相关的 API 使用方法 在 JavaScript 中,`iframe` 是一种嵌入其他文档的方式。通过 `iframe` 的 DOM 接口可以实现跨窗口通信以及资源管理等功能[^1]。 #### 创建和操作 iframe 可以通过 HTML 或者动态创建的方式来引入一个 `iframe`: ```html <iframe id="myIframe" src="https://example.com"></iframe> ``` 或者使用 JavaScript 动态生成: ```javascript const iframe = document.createElement('iframe'); iframe.src = 'https://example.com'; document.body.appendChild(iframe); ``` #### 访问 iframe 内部的内容 如果两个页面属于同一个源(origin),则可以从父窗口访问子窗口中的内容。例如: ```javascript // 获取 iframe 对象 const iframeWindow = document.getElementById('myIframe').contentWindow; // 向 iframe 发送消息 iframeWindow.postMessage('Hello from parent', '*'); // 修改 iframe 文档内的元素 iframeWindow.document.querySelector('#someElement').textContent = 'Updated Text'; ``` 需要注意的是,当尝试跨越不同源的操作时会触发浏览器的安全策略限制——即同源政策 (Same-Origin Policy)。 #### 跨域通信 PostMessage 方法 为了安全地允许来自不同域名的数据交换,现代浏览器支持 `postMessage()` 函数来进行跨域通讯: ```javascript // 父页面向 iframe 子页面发送数据 window.frames['myFrameName'].postMessage({ key: value }, targetOrigin); // 在 iframe 页面接收消息并处理 window.addEventListener('message', function(event) { console.log(event.data); // 输出接收到的消息对象 }); ``` 这里的关键在于指定正确的目标地址 (`targetOrigin`) 来防止潜在的安全风险[^2]。 #### URL Object URLs 和 revokeObjectURLs 对于文件上传下载场景下经常需要用到 Blob 类型的对象链接。下面展示如何利用这些技术配合 iframe 实现无刷新预览效果: ```javascript let blob = new Blob(["hello world"], {type : "text/plain"}); let objectUrl = URL.createObjectURL(blob); // 设置 iframe source 属性指向该临时 url 地址 document.getElementById("preview").src = objectUrl; setTimeout(() => URL.revokeObjectURL(objectUrl), 5000); // 清理不再使用的 URL 防止内存泄漏 ``` 上述代码片段展示了怎样生成一个基于二进制大对象(Blob)实例的新 URI 并将其赋给某个 `<iframe>` 元素作为其加载路径;之后还演示了适时释放此引用的重要性以优化性能表现。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值