JS在iframe内 取母板页控件值
时间: 2024-09-21 21:13:29 浏览: 48
在JavaScript中,如果你需要在一个`<iframe>`内的页面获取宿主页面(即母版页或外嵌页面)的控件值,这通常涉及到跨域通信的问题,因为浏览器出于安全考虑对来自不同源的脚本有一定的限制。最常见的方式是通过PostMessage API或者利用父框架提供的一些方法。
1. **Using `window.postMessage()`**: 如果宿主页面允许,你可以使用`postMessage`方法将数据从父窗口发送到iframe,然后在iframe内部接收到消息并处理:
```javascript
// 主板页面 (parent window)
document.getElementById('your-control').addEventListener('click', function() {
iframe.contentWindow.postMessage('controlValue', '*');
});
// Iframe 页面 (child frame)
window.addEventListener('message', function(event) {
if (event.origin === 'http://host.com') { // 指定允许的来源
console.log('Received value:', event.data);
}
});
```
2. **利用`<object>`标签** (适用于IE): 如果是IE浏览器,由于`iframe`安全性限制,可以尝试使用`<object>`标签嵌入内容,并通过它的`contentDocument`属性访问。
```html
<object id="myIframe" data="iframe.html"></object>
<script>
var parentCtrl = document.getElementById('your-control');
parentCtrl.onclick = function() {
var iframeDoc = document.getElementById('myIframe').contentDocument;
var control = iframeDoc.getElementById('controlId'); // 控制元素ID
control.value; // 获取其值
};
</script>
```
注意,上述方法都依赖于宿主页面的配合和同源策略设置,如果不是同一个域,可能会受到限制。如果安全需求较高,可能需要服务器端支持JSONP或其他跨域解决方案。
阅读全文