我想使用NW.js和webview控制外部网站,但是每次尝试这个我都有错误 - 没有定义Angular。
我的来源:
的index.html
html...head...body...
<webview id="webview" name="webview" src="https://google.com/" allownw></webview>
<script src="../js/script.js"></script>
...body...html
的script.js
(function() {
var gui = require('nw.gui');
var win = gui.Window.get();
var webview = document.getElementById("webview");
var tray = new gui.Tray({
icon : 'assets/icon.png'
});
var menu = new gui.Menu();
menu.append(new gui.MenuItem({
type: 'normal',
label: '▶️ Play',
click: function() {
webview.executeScript({code:"var player=angular.element(document.body).injector().get('player'); player.play();"});
}
}));
tray.menu = menu;
}());
此代码为我生成错误:ReferenceError:angular未定义
注意:网站google.com仅为示例。
答案 0 :(得分:0)
来自nw.js
docs:
在webview中加载本地文件
将以下权限添加到清单:
"webview": {
"partitions": [
{
"name": "trusted",
"accessible_resources": [ "<all_urls>" ]
}
]
}
并添加&#39; partition =&#34; trusted&#34;&#39;属性为webview标记。
这是<script
代码无法访问您的../js/script.js
文件的原因之一。我还建议使用本地文件示例的非相对路径:chrome-extension://yourdomain/js/script.js
(并且它相对于根而不是&#39; up&#39;目录)。
从Google docs开始,您可以将accessible_resources
设置为特定模式或文件。
您可能会对谷歌的文档中的insertCss
,setUserAgentOverride
,permissionrequest
事件,特别是executeScript
感兴趣。
注意:您可能不希望该webview访问您的nwjs上下文(allownw
),因为它可以访问您的程序可以访问的任何。对于外部URL和http,尤其是MITM篡改或第三方更改可能会导致某人获得对运行应用程序的PC的提升访问权限。
对于您的示例,我会将script.js
保留在webview之外,并让它通过脚本注入来检测webview。