电子浏览器窗口以沙盒模式获取白屏

时间:2017-09-13 12:50:53

标签: 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' --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。我开始研究更多,我发现我必须在我的窗口中使用“sandbox:true”

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');
});

我的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不需要任何东西,所以我最终得到一个空白屏幕。我看过很多帖子有这样的问题,但还没找到解决我的问题。

更新:经过大量测试后,似乎唯一无法使用的文件是我的Main.js(这是我的webpack生成的文件)所以现在我将查看我的webpack配置或查看我的反应是否是问题。

0 个答案:

没有答案