iframe嵌套,jq父页面获取子页面变量,Dom元素

本文详细介绍如何在父页面中获取子iframe内的DOM元素、变量及处理多级嵌套iframe的技巧。包括使用jQuery操作iframe内元素的具体方法,以及通过contentWindow访问子页面变量的示例。

1.父页面获取子页面id为“#st”的dom

var getSomething=$("iframe").contents().find("#st");

2获取多级iframe嵌套的dom元素

let getSomething = $("iframe").contents().find("iframe").contents().find("#something");

往后追加 contents().find("iframe")即可

3.父页面拿子页面的变量

var win = $("#mainFrame")[0].contentWindow;
//假如子页面有一个变量flag为false;想要更改它的值。
win.flag=true

4.

//1.在a.jsp中通过top.$.jBox.open打开一个弹窗弹窗中的内容为b.jsp
//2.b.jsp中通过<iframe>标签(id为indexIfm)嵌套着一个c.jsp
function toLike(a,unLikeIndex){
		top.$.jBox.open(
			"iframe:${ctxf }/index/toLike.do?unLikeIndex="+unLikeIndex, "匹配", 900,500, {
				buttons : {
					"关闭" : true,
					"确定" : "ok"
				},
				bottomText:"选中要匹配的内容,点击确定。",
				submit:function(v,h,f){
					if(v=="ok"){
//在a.jsp中获取c.jsp中的js元素testId
                                                testElement = h.find("iframe")[0].contentWindow.$("#indexIfm")[0].contentWindow.testId;
//在a.jsp中获取c.jsp中的dom元素,id为domId的<input>
                                                testDom = h.find("iframe")[0].contentWindow.$("#iframeId").contents().find("#domId").val();
//在a.jsp中获取c.jsp中标签名称为checkbox的所有元素
						obj = h.find("iframe")[0].contentWindow.$("#indexIfm")[0].contentWindow.document.getElementsByName("checkbox");
						}
                                }
                        });
                }

参考博客:https://blog.youkuaiyun.com/Just_Maybe/article/details/96143817

 

在Vue中获取iframe嵌套页面DOM元素,需要考虑iframe是否加载完成以及是否存在跨域问题。以下是一些具体的方法: #### 同域情况下获取iframe内的DOM元素iframe的源和当前Vue页面处于同一域名下时,可以在iframe加载完成后,通过 `contentWindow` 或 `contentDocument` 来访问其内部的DOM元素。 ```vue <template> <div> <iframe id="displayPdfIframe" :src="pdfUrl" width="100%" ref="pdfframe"></iframe> </div> </template> <script> export default { data() { return { pdfUrl: 'your-pdf-url.pdf' }; }, mounted() { const vm = this; const iframe = document.getElementById('displayPdfIframe'); iframe.onload = function() { vm.iframeWin = vm.$refs.pdfframe.contentWindow; console.log(vm.iframeWin); // 获取iframe内的DOM元素 const innerElement = vm.iframeWin.document.getElementById('inner-element-id'); console.log(innerElement); }; } }; </script> ``` #### 跨域情况下获取iframe内的DOM元素 如果存在跨域问题,直接访问iframe的 `contentWindow` 或 `contentDocument` 会受到浏览器的同源策略限制。可以通过 `postMessage` 进行跨域通信,在iframe内部页面和外部Vue页面之间传递数据。 - **外部Vue页面**: ```vue <template> <div> <iframe ref="iframe" id="iframe" :src="fromUrl"></iframe> </div> </template> <script> export default { data() { return { fromUrl: 'your-iframe-url' }; }, mounted() { window.addEventListener('message', (e) => { if (e.origin === 'https://your-iframe-origin') { console.log('Received data from iframe:', e.data); // 处理从iframe传来的数据 } }, false); const iframe = this.$refs.iframe; iframe.contentWindow.postMessage('Request DOM data', 'https://your-iframe-origin'); } }; </script> ``` - **iframe内部页面**: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>IFrame Page</title> </head> <body> <div id="inner-element">This is an inner element</div> <script> window.addEventListener('message', (e) => { if (e.origin === 'https://your-vue-origin') { const innerElement = document.getElementById('inner-element'); const elementData = { text: innerElement.textContent }; e.source.postMessage(elementData, e.origin); } }, false); </script> </body> </html> ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值