首页 > 解决方案 > nwjs - 在二进制文件上调用函数

问题描述

// source.js
function foo(){
    alert("its work!");
}

// main.js
nw.Window.open("index.html", {}, function (win) {});
setTimeout(() => {
  let win = nw.Window.get();
  win.evalNWBin(null, "binary.bin");
  foo();
}, 2000);

我运行以下命令来生成二进制文件:

nwjc source.js binary.bin

当我运行上面的代码时,它显示了这个错误:

Uncaught ReferenceError: foo is not defined

如何从 main js 调用 binary.bin 上的函数?

标签: javascriptnode.jsnode-webkit

解决方案


因为你是"main": "index.js"在你的 中做的package.json,所以代码将在 Node 上下文中运行,而alert不是一个函数。

如果你这样做,"main": "index.html"那么有

<script>
  nw.Window.get().evalNWBin(null, 'binary.bin');
  foo();
</script>

它会正常工作。

您可以Right-Click > Inspect Background Page查看控制台日志错误的节点进程开发工具。

或者,您可以在全局window对象上公开您的函数。

window.foo = function () {
  alert('It works');
};

您可以通过将代码放入回调函数中来等待应用程序窗口加载。

nw.Window.open('index.html', {}, function (win) {
  win.evalNWBin(null, 'binary.bin');
  win.window.foo();
});

然后你不需要“获取”窗口,你已经有了它。您可以访问其全局window对象以访问存储在其上的内容。


推荐阅读