私は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,
}
}))
電子アプリを起動すると、ブラウザの開発ツールで次のエラーが発生します。
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オブジェクトモデルの統合によるものだと思いますか?理解不足でごめんなさい。助けてくれてありがとう。
あなたは正しい方向に進んでいます。これを行う別の方法は、nodeIntegrationをfalseに設定し、jsファイルをプリロードすることです。これは、BrowserWindowコンテキストで実行され、プロセスロードイベントが発生するとウィンドウオブジェクトにアクセスできるようになります。プリロードjavascriptファイルには、それ自体のためだけに完全なノード統合があります。
これを使用してTiddlyFoxハンドラーを作成したので、ElectronアプリのTiddlyWikiに含まれているTiddlyFoxセーバーを使用できました。これがそのコードです。それは実際には非常に簡単です。
https://github.com/Arlen22/TiddlyWiki-Electron
TiddlyWikiデータフォルダーをElectronに直接ロードする場合は、このHTMLファイルをロードしてみてください。ノード統合はでtrueに設定する必要があります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>
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加