电子浏览器javascript错误

电子浏览器javascript错误,javascript,node.js,electron,tiddlywiki,tiddlywiki5,Javascript,Node.js,Electron,Tiddlywiki,Tiddlywiki5,我对node、javascript和electron非常陌生。我只是想写一个简单的应用程序,在浏览器窗口中打开一个本地HTML文件。本地文件包含一些复杂的嵌入式javascript(tiddlywiki)。下面是一些示例代码(我在本例中没有使用本地文件,但结果相同): 当electron应用程序启动时,我在浏览器开发工具中遇到以下错误 Uncaught TypeError: Cannot read property 'length' of undefined at Object.$tw.

我对node、javascript和electron非常陌生。我只是想写一个简单的应用程序,在浏览器窗口中打开一个本地HTML文件。本地文件包含一些复杂的嵌入式javascript(tiddlywiki)。下面是一些示例代码(我在本例中没有使用本地文件,但结果相同):

当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
    }
})

我最终解决这个问题的方法是在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>


你在正确的轨道上。另一种方法是将nodeIntegration设置为false并预加载一个js文件,该文件将在BrowserWindow上下文中运行,并能够在进程加载事件触发后访问窗口对象。预加载javascript文件本身具有完整的节点集成

我用它制作了一个TiddlyFox处理程序,这样我就可以使用我的Electron应用程序中TiddlyWiki中的TiddlyFox保护程序。这是它的代码。其实很简单

如果您想将TiddlyWiki数据文件夹直接加载到Electron中,可以尝试加载此HTML文件。需要在
新浏览器窗口(…)中将节点集成设置为true


global.$tw=global.require(“./boot/bootprifix.js”).bootprifix();
全局.$tw.boot.argv=['./editions/server'];
全局.$tw=require(“./boot/boot.js”).TiddlyWiki(全局.$tw);

失败的是网站上的tiddlywiki代码:
(tiddlywiki.com/:27506)
查看堆栈跟踪中引用的行后,tiddlywiki似乎无法识别启动它的浏览器,因此假设它是从命令行启动的。这实际上非常适合我的要求。我还找到了另一种方法,将webView标记用于本地HTML文件。这实际上可以更好地满足我的需求,因为它允许我向页面注入一些js作为预加载——允许我保留一些tiddlywiki控件(我认为)。这是一个很好的信息@ArlenBeiler。我正在开发一个电子版的TiddlyDesktop,作为学习Javascript、node和Electron的个人项目。实际上,通过添加一个可以利用“fs”的save函数,我可以通过preload.js使save函数正常工作$tw.saverHandler.savers.push(新的MyTempSaver($tw.saverHandler.wiki));
<html>
  <body>
    <webview id="webView" src="http://tiddlywiki.com" style="display:inline-flex; width:100%; height:100%" </webview>
  </body>    
</html>