NW.js - webview - Angular未定义错误

时间:2017-10-13 17:57:45

标签: angularjs webview nw.js

我想使用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仅为示例。

1 个答案:

答案 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设置为特定模式或文件。

您可能会对谷歌的文档中的insertCsssetUserAgentOverridepermissionrequest事件,特别是executeScript感兴趣。

注意:您可能不希望该webview访问您的nwjs上下文(allownw),因为它可以访问您的程序可以访问的任何。对于外部URL和http,尤其是MITM篡改或第三方更改可能会导致某人获得对运行应用程序的PC的提升访问权限。

对于您的示例,我会将script.js保留在webview之外,并让它通过脚本注入来检测webview。