首页 > 解决方案 > 在 Electron 本地运行非内联 JS

问题描述

在本地开发时,我想将所有单独的 JS 脚本作为文件粘贴在另一个文件夹中。我能够做到这一点的唯一方法是如果我不声明该meta声明。但是,如果不声明它,我当然会收到警告。

Electron 安全警告(不安全的 Content-Security-Policy) 此渲染器进程没有设置内容安全策略或启用了“unsafe-eval”的策略。这会使该应用程序的用户面临不必要的安全风险。

有没有办法在不忽略或违反 CSP 的情况下在本地进行?

标签: javascriptnode.jselectroncontent-security-policy

解决方案


在渲染器中设置以下元标记。

<meta http-equiv="Content-Security-Policy" content="script-src 'nonce-xxx or sha256-yyy' " />

请查看我的 github repo electron-renderer-CSP-sample,其中包含用于内部和外部 js 文件的 nonce 和 SHA 方法的示例。

或者

您可以在创建主 BrowserWindow 时使用 webPreferences 中的 preload 参数。在 main.js 中,

  mainWindow = new BrowserWindow({
    webPreferences: {
      nodeIntegration: false,
      preload: path.join(__dirname, 'preload.js')
    }
  })

在 preload.js

        const remote = require("electron").remote;
// electron APIs
        window.appQuit = function() {
          remote.app.exit(0);
        };
// node modules
       window.notify= function notify(msg) {
       return require('node-notifier').notify(msg);
       };
// DOM can be manipulated from here (Refer 
// https://github.com/electron/electron-quick-start/blob/master/preload.js)

推荐阅读