当前位置: 首页 > 知识库问答 >
问题:

如何调用预加载中定义的函数。来自electron中渲染器进程的js

林昱
2023-03-14

在这个答案中,建议可以定义一个javascript函数,并将其附加到windows中的preload.js文件中,然后从渲染器进程中调用(在包含的renderer.js或直接作为html文件中的脚本)使用window.functionName,即在preload.js中:

window.myFunction = function(){
   //do something here that requires
   //ipcRenderer
} 

索引中。html

<script>
   var myButton = document.getElementById("myButtonId")
   myButton.addEventListener('click', (e) => {
      window.myFunction();
});
</script>

但是,当我这样做并单击按钮时,我会得到错误消息uncaughttypeerror:window。myFunction不是一个函数。有人能解释一下为什么会抛出这个错误,以及如何定义函数吗?

共有2个答案

郝峰
2023-03-14

不必使用桥接方法的另一种解决方法是禁用ContextIsolation,尽管现在不建议这样做以确保更好的安全性。

但是,如果您有遗留代码并且不想更改,则可以这样做。

webPreferences: {
  contextIsolation: false,
  preload: path.join(__dirname, './preload.js'),
}

将webPreferences变量显式设置为false。默认情况下,现在新版本的Electron中启用了ContextIsolation

叶德运
2023-03-14

使用上下文隔离和上下文桥。

预加载。js

 const { contextBridge } = require('electron')
 contextBridge.exposeInMainWorld('YourAPI',
  {
    yourFunction: () => {'Your Codes.'}
  });

你的. html

<html>
    <head></head>
    <body>
        <script>
            window.YourAPI.yourFunction();
        </script>
    </body>
</html>
 类似资料:
  • 问题内容: 我想在一些嵌入式html中调用一个函数。我尝试了以下操作,但未调用该函数。这是在render方法中调用函数的错误方法吗? 问题答案: 要调用该函数,您必须添加

  • 通过 runApp 方法运行的 Web 应用,可通过 rax-pwa 提供的 preload 和 prerender 方法优化用户体验。 $npm i rax-pwa --save 预加载 预加载资源可以帮助页面更快速的渲染。 可通过 preload 来进行预加载。仅对 Web App 有效。 import { createElement } from 'rax'; import { preloa

  • Vue3 render函数创建的按钮怎么添加自定义指令 在template中直接写是可以的 这样的话 正常显示

  • 由于 Electron 使用 Chromium 显示网页,那么,Chromium 的多进程架构也被使用。Electron 中的每个网页都在自己的进程中运行,称为渲染器进程 (renderer process)。 在正常的浏览器中,网页通常运行在沙盒封装化的环境中,并且不允许访问本机资源。然而,Electron 用户有权在网页中使用 Node.js 的 API,从而允许较低级别的操作系统交互。 选自

  • electron 的渲染进程如何获取到process.cwd()的值 或者 process.resourcesPath也行 在preload.js中可以拿到process对象,但是没有cwd函数和resourcesPath的值。 之前版本的remote.getGlobal在27版本中也被移除,否则可以在main.js里面进行设置 还有一种办法是在preload.js中定义 ipcRender的通信

  • 在Spring Boot中,有一个属性文件application.property,与这个属性一起,我创建了一个额外的属性文件,名为MyOwnProp.properties。 如何在中加载?表示如何在Application.properties中包含另一个命名属性? 有什么进展吗?