电子浏览器JavaScript错误
我对 node、javascript 和 electron 还很陌生。我只是想编写一个简单的应用程序,在浏览器窗口中打开本地 HTML 文件。本地文件有一些复杂的嵌入式 javascript(tiddlywiki)。以下是一些示例代码(我在这个代码中没有使用本地文件,但结果是一样的):
const {app, BrowserWindow} = require('electron')
const path = require('path')
const url = require('url')
let win
function createWindow () {
// Create the browser window.
win = new BrowserWindow({width: 800, height: 600})
// and load the index.html of the app.
win.loadURL(url.format({
pathname: 'tiddlywiki.com',
protocol: 'http:',
slashes: true,
webPreferences: {
nodeIntegration: false,
}
}))
当 electron 应用程序启动时,我在浏览器开发工具中收到以下错误。
Uncaught TypeError: Cannot read property 'length' of undefined
at Object.$tw.boot.startup (tiddlywiki.com/:27506)
at tiddlywiki.com/:27765
at Object.$tw.boot.decryptEncryptedTiddlers (tiddlywiki.com/:27053)
at Object.$tw.boot.boot (tiddlywiki.com/:27763)
at _boot (tiddlywiki.com/:27772)
at tiddlywiki.com/:27782
我认为这是因为集成了 node.js 对象模型?抱歉,我理解能力不足。提前感谢帮助。
您将
webPreferences
放入了错误的位置。
您必须将其放在 BrowserWindow 的初始化中,而不是 url.format 中:
win = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: false
}
})
您走在正确的轨道上。另一种方法是将 nodeIntegration 设置为 false 并预加载一个 js 文件,该文件将在 BrowserWindow 上下文中运行,并且能够在进程加载事件触发后访问窗口对象。预加载的 javascript 文件本身具有完整的节点集成。
我用它来制作一个 TiddlyFox 处理程序,这样我就可以在我的 Electron 应用程序中使用 TiddlyWiki 中的 TiddlyFox 保存器。这是它的代码。它实际上非常简单。
https://github.com/Arlen22/TiddlyWiki-Electron
如果您想将 TiddlyWiki 数据文件夹直接加载到 Electron 中,您可以尝试加载此 HTML 文件。需要在
new BrowserWindow(...)
<!doctype html>
<html>
<head></head>
<body class="tc-body">
<script>
global.$tw = global.require("./boot/bootprefix.js").bootprefix();
global.$tw.boot.argv = ['./editions/server'];
global.$tw = require("./boot/boot.js").TiddlyWiki(global.$tw);
</script>
</body>
</html>
中将 Node Integration 设置为 true
我最终解决这个问题的方法是在 main.js 中使用以下代码:
win.loadURL(url.format({
pathname: path.join(__dirname, 'index2.html'),
protocol: 'file:',
slashes: true
}))
然后 index2 包含以下内容:
<html>
<body>
<webview id="webView" src="http://tiddlywiki.com" style="display:inline-flex; width:100%; height:100%" </webview>
</body>
</html>
还使用来自 tiddlywiki.com 的本地 file:empty.html 进行了测试,结果正常。我认为这使我能够预加载 .js 文件来控制一些 tiddlywiki 事件。必须学习更多知识才能测试这一点。