javascript - 从 Chrome 扩展程序注入(inject)的脚本是否可以访问页面上的 javascript (angularjs)?

标签 javascript jquery angularjs google-chrome google-chrome-extension

我正在尝试使用 Google Chrome 扩展程序作为我正在开发的网页的补充工具。

我使用 chrome.tabs.executeScript 通过 Google Chrome 扩展在网络应用程序上注入(inject)了此脚本

注入(inject)脚本

<script>
    var angular = document.querySelector('body');
    var scope = angular.element(angular).scope();
    ...
</script> 

脚本已正确注入(inject)。但是,当调用脚本时,我收到此错误 Uncaught TypeError: angular.element is not a function 。这基本上意味着脚本找不到 AngularJS 依赖项(?)。

所以我的问题 - 从 Chrome 扩展程序注入(inject)的脚本是否可以访问页面上的 javascript (AngularJS)?

如果是的话,我做错了什么? 如果不是,什么是好的替代解决方案?

最佳答案

您正在尝试重用在 isolated scope 中运行的页面脚本中的代码。 .

由于 DOM 是共享的,您可以通过在内容脚本中创建脚本标记来注入(inject)页面脚本。

script.js

// define pageScript as a string or use xhr 
// to load it from a separate file, i. e. page-script.js
var pageScript = `
    var angular = document.querySelector('body');
    var scope = angular.element(angular).scope();
    //...`;

var scriptEl = document.createElement('script');
scriptEl.textContent = pageScript;
document.head.appendChild(scriptEl);

背景.js

chrome.browserAction.onClicked.addListener(function() {
    chrome.tabs.executeScript({ file: 'script.js' });
});

关于javascript - 从 Chrome 扩展程序注入(inject)的脚本是否可以访问页面上的 javascript (angularjs)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34669903/

相关文章:

javascript - 当列隐藏在表布局为 :fixed 的表中时,IE8 不会调整 tbody 或 thead 的大小

javascript - 不要在表单序列化时将元素包含到 ng-hide 中

javascript - 异步执行绑定(bind)的 javascript 事件处理程序

javascript - 单击表格单元格上的功能

angularjs - ui-grid 3.0.0 中的 selectedItem

javascript - 必发喜欢赔率递增和递减

javascript - 处理使用对象破坏和对象休息的组件的 Prop 类型的正确方法是什么......传播收集 Prop

javascript - 具有特定计时器值的数字的增量值

angularjs - 如何在 kendo ui 中使用 Angular 模板

javascript - 如何从范围内的变量填充 angularjs 中的单选按钮并将任何更改收集到范围内