javascript - React + Electron webview标签预加载js不起作用

标签 javascript reactjs electron

当我使用 webview 标签时,预加载 js 不起作用

我的代码如下:

// test.js
<div>
    <webview id="foo" src="https://www.github.com/" preload="file://preload.js"/>
</div>

我的 preload.js 文件:
// preload.js
alert('preload success')

我也试过这个:
// test.js
<div>
    <webview id="foo" src="https://www.github.com/" preload={`file://${__dirname}/preload.js`}/>
</div>


我什至截获了 main.js 中的文件协议(protocol)
// main.js
app.on('ready', () => {
  protocol.interceptFileProtocol('file', (request, callback) => {
    console.log('success')
    const url = request.url.substr(7);
    callback({path: path.normalize(`${__dirname}/${url}`)});
  }, (error) => {
    if (error) console.error('Failed to intercept protocol');
  });
})
;

但这些尝试都没有奏效。控制台中没有“成功”,也没有“成功”警报。但是如果我使用这样的绝对路径:
// test.js
<div>
    <webview id="foo" src="https://www.github.com/" preload="file:///home/ppp/electron-dict/src/components/preload.js"/>
</div>

代码运行良好,我的应用程序提示“成功”。为什么是这样?

我的项目路径:
├── public
│   ├── index.html
│   ├── main.js
├── src
│   ├── App.js
│   ├── components
│   │   ├── test.js
│   │   ├── preload.js
│   └── index.js

Electron 和 React 版本:
├─ electron@7.1.1
├─ react@16.11.0

最佳答案

表明 preload 是 webview 标签的顶级属性,不在 webpreferences 内

<webview src="https://www.github.com/" preload="./test.js"></webview>

一个字符串,它指定将在访客页面中运行其他脚本之前加载的脚本。脚本 URL 的协议(protocol)必须是 file:asar: , 因为它将由 require 加载在引擎盖下的访客页面中。

当访客页面没有节点集成时,此脚本仍然可以访问所有 Node API,但在此脚本执行完成后,由 Node 注入(inject)的全局对象将被删除。

注意:此选项将显示为 preloadURL (不是 preload )在 webPreferences指定为 will-attach-webview事件。

您可以在 Electron preload script for webview not working? 上找到更多信息

关于javascript - React + Electron webview标签预加载js不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58871560/

相关文章:

javascript - AJAX post数据到达ASP.NET Core 2.1.1 Controller 时为空

javascript - 用另一个包完全覆盖 NPM 包

javascript - Firefox 22.0 范围错误?

javascript - 将图像上传到 Cloudinary Express.js React Axios post 请求

javascript - 创建后立即自动提交 ReactJS 表单

macos - 在Mac上为基于Electron的App提供不同的Dock和Tray图标吗?

angularjs - 有没有办法在 React Virtual DOM 中使用 Angular Directive

javascript - 更新数组上的状态,除了该数组中的一个对象之外 ReactJS

electron - 如何为 cypress electro 测试禁用 contextIsolation 并启用 nodeIntegration?

javascript - Bash脚本未从Electron App的生产版本中执行