我在做一个需求,是需要从 electron 后台获取到 html 路径,之后动态创建 iframe 插入到编辑器
目前代码如下:
ipcRenderer.on("h5-iframe", (event, arg) => { let iframe = document.createElement('iframe'); iframe.src = arg; iframe.width = '100%'; iframe.src = arg console.log(1, iframe.contentDocument) // 1 null console.log(2, iframe.document) // 2 undefined iframe.addEventListener('load', (event) => { console.log(3, iframe.contentDocument) console.log(4, iframe.document) }) iframe.onload = function () { console.log(5, iframe.contentDocument) console.log(6, iframe.document) } let div = document.createElement('div'); div.appendChild(iframe); let iframeHtml = div.innerHTML; tinymce .get(tinymceId.value) .execCommand( "mceInsertContent", false, iframeHtml );});
但得到的结果是如下,导致无法获取内容计算高度
console.log(1, iframe.contentDocument)
为 null
console.log(2, iframe.document)
为 undefined
frame.addEventListener('load', (event) => {})
和 iframe.onload = function () {}
均无任何反馈
已知 arg
可以正确返回,
且页面可以正常插入显示,所以应该也不是跨域问题
请问如何解决?万分感谢!
ipcRenderer.on("h5-iframe", (event, arg) => { const iframe = document.createElement('iframe'); iframe.src = arg; iframe.style.width = '100%'; const editorContent = document.getElementById('editor-content'); editorContent.appendChild(iframe); iframe.onload = function () { // 获取高度并调整 const height = iframe.contentWindow.document.body.scrollHeight; iframe.style.height = `${height}px`; };});
或者用 MutationObserver 监听 iframe 里面 DOM 变化:
function adjustIframeHeight(iframe) { const height = iframe.contentWindow.document.body.scrollHeight; iframe.style.height = `${height}px`;}ipcRenderer.on("h5-iframe", (event, arg) => { const iframe = document.createElement('iframe'); iframe.src = arg; iframe.style.width = '100%'; const editorContent = document.getElementById('editor-content'); // 确保这个元素存在 editorContent.appendChild(iframe); iframe.onload = function () { adjustIframeHeight(iframe); const observer = new MutationObserver(() => adjustIframeHeight(iframe)); observer.observe(iframe.contentDocument.body, { childList: true, subtree: true }); };});
您好!
在 Electron 中,由于同源策略的限制,iframe 的 contentDocument 和 document 属性可能无法直接访问,尤其是在 iframe 加载的内容与主页面不同源时。
为了解决这个问题,您可以尝试以下方法:
* 正如您已经尝试过的,您可以通过监听 iframe 的 'load' 事件来获取其内容。但请注意,由于同源策略的限制,您可能无法直接访问 iframe 的 contentDocument 或 document 属性。* 您可以尝试在 'load' 事件回调中,使用 postMessage API 向 iframe 发送消息,然后在 iframe 内部监听这个消息并作出响应。
* 在主页面中,当 iframe 加载完成后,向其发送一个消息。* 在 iframe 内部,监听这个消息,并作出相应的响应,例如调整高度。
示例代码:
主页面(Electron 主进程):
ipcRenderer.on("h5-iframe", (event, arg) => { let iframe = document.createElement('iframe'); iframe.src = arg; iframe.width = '100%'; iframe.addEventListener('load', (event) => { // 向 iframe 发送消息 iframe.contentWindow.postMessage({ action: 'adjustHeight' }, '*'); }); let div = document.createElement('div'); div.appendChild(iframe); let iframeHtml = div.innerHTML; tinymce .get(tinymceId.value) .execCommand( "mceInsertContent", false, iframeHtml );});
iframe 页面:
window.addEventListener('message', (event) => { if (event.data.action === 'adjustHeight') { // 调整 iframe 高度 document.body.style.height = '100vh'; // 或其他您希望的高度 }});
这样,即使由于同源策略的限制,您不能直接访问 iframe 的 contentDocument 或 document 属性,您仍然可以通过 postMessage API 与 iframe 进行通信,从而调整其高度。
请注意,上述代码仅为示例,您可能需要根据您的实际需求和场景进行调整。
希望这可以帮助到您!如果您还有其他问题,请随时提问。
本文向大家介绍js实现iframe自动自适应高度的方法,包括了js实现iframe自动自适应高度的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了js实现iframe自动自适应高度的方法。分享给大家供大家参考。具体如下: 在编写网页的时候,很多时候要用到自动伸缩iframe高度 ,假如ifram中嵌入的是一个列表,那么增加数据后,刷新列表,iframe高度会自动伸长。删除数据后,ifr
本文向大家介绍iframe如何自动调整高度?相关面试题,主要包含被问及iframe如何自动调整高度?时的应答技巧和注意事项,需要的朋友参考一下 未跨域时,在iframe中利用他的父窗口对象将本页面的滚动高度设置给iframe的height 跨域时,在iframe中将自己的的滚动高设置在本页面内的一个隐藏于父页面不跨域的iframe的hash值, 在隐藏的iframe中将值取出,同未跨域一样设置到要
我的项目目录如下: 其余 electron 为应用 main.js 主进程存放目录,dist、dist=electron 分别为 vue 的打包目录和 electron 的打包目录 之前我都是将 dist 上传到服务器,后 electron 中通过访问网络地址进行展示操作 但如今客户要求应用本地化,应该怎么做呢? 是将 electron 中的 mainWindow.loadURL() 指向本地 d
本文向大家介绍教你用jquery实现iframe自适应高度,包括了教你用jquery实现iframe自适应高度的使用技巧和注意事项,需要的朋友参考一下 iframe代码,注意要写ID jquery代码一: jquery代码二:
本文向大家介绍jsp页面iframe高度自适应的js代码,包括了jsp页面iframe高度自适应的js代码的使用技巧和注意事项,需要的朋友参考一下 以下操作写在body里面,form表单外 test.jsp如下:
问题内容: 现在,我有一个从外部页面读取的jQuery UI弹出对话框。此页面通过flowplayer从另一个具有视频的外部读取。 我正在使用iframe将视频嵌入到第一个视频中: 100%的宽度似乎没问题,但100%的高度无效。有没有解决的办法? 我在哪里以及如何嵌入代码以及ID内容。请任何人帮忙? 问题答案: 如果要使用100%而不是像素值,则必须使用某种JavaScript来动态调整ifra