Javascript 电子浏览器窗口在沙盒模式下显示白色屏幕
我有电子与反应应用程序 我用electron packager创建了我的构建Javascript 电子浏览器窗口在沙盒模式下显示白色屏幕,javascript,macos,electron,sandbox,Javascript,Macos,Electron,Sandbox,我有电子与反应应用程序 我用electron packager创建了我的构建 electron-packager . --ignore=./.gitignore --ignore=./.node_modules --ignore=./webpack.config.js --platform=mas --arch=all --icon='./electron.icns' --app-bundle-id='com.my.id' --helper-bundle-id='com.my.id.helper
electron-packager . --ignore=./.gitignore --ignore=./.node_modules --ignore=./webpack.config.js --platform=mas --arch=all --icon='./electron.icns' --app-bundle-id='com.my.id' --helper-bundle-id='com.my.id.helper' --app-category-type=public.app-category.utilities --overwrite --asar=true --app-version='1.0.4' --out=release-builds
构建目前运行良好,之后我使用脚本对应用程序进行签名
#!/bin/bash
# Name of your app.
APP="SmarterBack"
# The path of your app to sign.
APP_PATH="release-builds/SmarterBack-mas-x64/SmarterBack.app"
# APP_PATH="release-builds/SmarterBack-darwin-x64/SmarterBack.app"
# The path to the location you want to put the signed package.
RESULT_PATH="/Users/admin/Desktop/$APP.pkg"
# The name of certificates you requested.
APP_KEY="3rd Party Mac Developer Application: JENGO LLC (63UV74H5Q5)"
INSTALLER_KEY="3rd Party Mac Developer Installer: JENGO LLC (63UV74H5Q5)"
# The path of your plist files.
CHILD_PLIST="child.plist"
PARENT_PLIST="parent.plist"
FRAMEWORKS_PATH="$APP_PATH/Contents/Frameworks"
codesign --entitlements "$CHILD_PLIST" -v -f -s "$APP_KEY" "$FRAMEWORKS_PATH/Electron Framework.framework/Versions/A/Electron Framework"
codesign --entitlements "$CHILD_PLIST" -v -f -s "$APP_KEY" "$FRAMEWORKS_PATH/Electron Framework.framework/Versions/A/Libraries/libffmpeg.dylib"
codesign --entitlements "$CHILD_PLIST" -v -f -s "$APP_KEY" "$FRAMEWORKS_PATH/Electron Framework.framework/Versions/A/Libraries/libnode.dylib"
codesign --entitlements "$CHILD_PLIST" -v -f -s "$APP_KEY" "$FRAMEWORKS_PATH/Electron Framework.framework"
codesign --entitlements "$CHILD_PLIST" -v -f -s "$APP_KEY" "$FRAMEWORKS_PATH/$APP Helper.app/Contents/MacOS/$APP Helper"
codesign --entitlements "$CHILD_PLIST" -v -f -s "$APP_KEY" "$FRAMEWORKS_PATH/$APP Helper.app/"
codesign --entitlements "$CHILD_PLIST" -v -f -s "$APP_KEY" "$FRAMEWORKS_PATH/$APP Helper EH.app/Contents/MacOS/$APP Helper EH"
codesign --entitlements "$CHILD_PLIST" -v -f -s "$APP_KEY" "$FRAMEWORKS_PATH/$APP Helper EH.app/"
codesign --entitlements "$CHILD_PLIST" -v -f -s "$APP_KEY" "$FRAMEWORKS_PATH/$APP Helper NP.app/Contents/MacOS/$APP Helper NP"
codesign --entitlements "$CHILD_PLIST" -v -f -s "$APP_KEY" "$FRAMEWORKS_PATH/$APP Helper NP.app/"
codesign --entitlements "$CHILD_PLIST" -v -f -s "$APP_KEY" "$APP_PATH/Contents/MacOS/$APP"
codesign --entitlements "$PARENT_PLIST" -v -f -s "$APP_KEY" "$APP_PATH"
在我签署我的应用程序后,我的浏览器窗口开始出现空白屏幕,无法加载任何内容。经过一些调试后,我注意到我不能使用require在index.html中导入我的js、css。我开始做更多的研究,我发现我必须在我的窗口中使用“沙盒:真”
window = new BrowserWindow({
webPreferences: {
sandbox: true,
nodeIntegration: false
}
})
我甚至尝试将preload.js用于webPreferences
var hostProcess = process;
var hostRequire = require;
process.once('loaded', function(){
global.host = {
process: hostProcess,
crash: function () {
hostProcess.crash();
},
};
global.host.ipc = hostRequire('ipc');
global.host.ipc = hostRequire('fs');
});
My Index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="Content-Security-Policy" content="default-src 'none';script-src 'self'">
<title>SmarterBack Preferences</title>
<link rel="stylesheet" type="text/css" href="bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="quill.snow.css">
<link rel="stylesheet" type="text/css" href="Main.css">
</head>
<body>
<div id="main"></div>
</body>
<script src="js/libs/createjs/preloadjs-0.6.2.min.js"></script>
<script src="js/BRFv4Demo.js"></script>
<script src="js/jquery.min.js"></script>
<script src="js/jquery-3.2.1.min.js"></script>
<script src="js/bootstrap.min.js"></script>
<script type="text/javascript" src="/Main.js"></script>
</html>
智能背包偏好
就目前而言,一切似乎都不起作用。当应用程序处于沙盒模式时,我不能使用任何节点进程,我的html也不需要任何东西,所以我只需要一个空白屏幕。我看到过许多文章都有这样的问题,但还没有找到解决问题的方法
更新:经过大量测试,似乎唯一不能使用require的文件是my Main.js(这是我的网页生成文件),所以现在我将查看我的网页配置,或者看看我的react是否是问题所在