作者:爱上高清_925 | 来源:互联网 | 2023-09-17 13:18
iframe
electron
的窗口控件,实际上就是一个html
解析工具,也就是说,通过electron
可以用最短的代码,写一个浏览器,甚至可以查看浏览器中网页源代码,如下图中点击View
->Toggle Developer Tools
代码只需要一个main.js
const {app, BrowserWindow} = require('electron')function createWindow () {const mainWindow = new BrowserWindow({width: 800,height: 600,})mainWindow.loadURL('https://tinycool.blog.csdn.net/');mainWindow.show()
}app.whenReady().then(() => {createWindow()app.on('activate', function () {if (BrowserWindow.getAllWindows().length === 0) createWindow()})
})
其中,mainWindow.loadURL
用于加载链接。
当然,仅仅这样并不足以称为是一个浏览器,因为浏览器最起码得自己输入链接。而在electron
中,提供了三种内嵌网页的方法,刚刚用到的BrowserWindow只是第一种。
而官方推荐的方法是iframe
,这个也不出意外,众所周知iframe
是个html元素,专门用于网页内嵌。故而修改index.html
中的body
,将iframe
嵌入其中。
<body><div id&#61;"container" style&#61;"width:100%"><input id&#61;"input" style&#61;"width:100%"><iframe id&#61;"iframe" width&#61;"100%"src&#61;"https://tinycool.blog.csdn.net/"frameborder&#61;"0"onload&#61;"changeFrameHeight()">iframe>div>
body>
其中&#xff0c;changeFrameHeight
为其加载时的事件&#xff0c;目的是让iframe
的尺寸和整个页面相适配&#xff0c;这个函数可定义在preload.js
中
function changeFrameHeight(){var ifm&#61; document.getElementById("iframe");ifm.height&#61;document.documentElement.clientHeight-50;
}
又考虑到当窗口尺寸发生变化时&#xff0c;也应该调用这个高度适配函数&#xff0c;故添加一个监听器
window.addEventListener(&#39;resize&#39;, function(){changeFrameHeight();
})
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ll9beQSr-1651625379762)(js/electron_8.png)]
输入网址
这回上面有个输入框了&#xff0c;可以输入网址&#xff0c;接下来实现这样的功能&#xff1a;输入网址后回车&#xff0c;则iframe
跳转到指定网址。这个功能十分简单&#xff0c;只需在加载的时候&#xff0c;为这个input
绑定一个回车事件
window.addEventListener(&#39;DOMContentLoaded&#39;, () &#61;> {const input &#61; document.getElementById("input");const ifm &#61; document.getElementById("iframe");input.addEventListener("keydown", function(evt){if(evt.key&#61;&#61;&#61;"Enter"){ updateURL(ifm,input.value)}})
})function updateURL(ifm, url){if (url.slice(0, 8).toLowerCase() !&#61; &#39;https://&#39; && url.slice(0, 7).toLowerCase() !&#61; &#39;http://&#39;)url &#61; &#39;https://&#39;&#43; url;ifm.src &#61; url
}
效果为