Javascript 通过Google Chrome扩展从注入的html调用带有ng指令的函数
我正在尝试使用Chrome扩展作为我正在开发的web应用程序的免费工具 我使用Javascript 通过Google Chrome扩展从注入的html调用带有ng指令的函数,javascript,jquery,html,angularjs,google-chrome-extension,Javascript,Jquery,Html,Angularjs,Google Chrome Extension,我正在尝试使用Chrome扩展作为我正在开发的web应用程序的免费工具 我使用chrome.tab.executeScript操作web应用程序的DOM,并在DIV中添加一个按钮 chrome.tabs.executeScript({ code: 'var e = document.createElement("div");' + 'e.innerHTML = "' + '<button ng-click="myfnc(
chrome.tab.executeScript
操作web应用程序的DOM,并在DIV
中添加一个按钮
chrome.tabs.executeScript({
code: 'var e = document.createElement("div");' +
'e.innerHTML = "' +
'<button ng-click="myfnc()"></button>' +
'";' +
'document.getElementsByTagName("body").appendChild(e);'
});
但是,当我点击按钮时,什么也没有发生。你知道为什么吗?来自Google Chrome扩展的注入html是否可以直接与网页代码交互 创建属性为
ng click
的元素不会通知Angular页面中存在该元素,因为在引导过程中会对文档进行一次解析。因此,有一个元素存在于任何角度范围的“外部”,这意味着属性ng click
只是存在,并没有导致调用相应的指令(ngClick
)
当然,如果页面具有角度,那么在将元素插入页面后,您将希望使用与所需的$scope
一起编译元素
全面的解决方案超出了您的问题范围。(为什么单击按钮时什么都没有发生?)如果您想了解更多有关使用带Angular的注入代码的信息,请阅读:
- 用于拾取元素的
对象$scope
- 使用angular elements上可用的
- 在中使用派生的
对象,以便Angular知道它$scope
$scope
:
var angular = document.querySelector('body');
var scope = angular.element(angular).scope();
var newElem = angular.element('div');
angular.append(newElem);
$compile
具有此$scope
的元素:
$compile(newElem)(scope);
有关动态创建角度元素的更多信息,请参见的答案。非常感谢您为我指明了正确的方向。我将尝试了解更多有关这方面的信息。在第2项中是
angular.append(ngElem)代码>或角度追加(newElem)代码>?所以我要做的就是把$scope
放在我想放按钮的地方;附加元素并使用$compile
在页面上呈现它。这真的很有道理。唯一的问题是chrome.tabs.executeScript
无法访问angularjs
文件和网页上的其他Java脚本。它在一个孤立的世界上运行,因此您的建议将有以下错误uncaughtreferenceerror:angular未定义
@sdgluck@jimx将
插入执行这些操作的页面,而不是尝试在后台脚本中执行这些操作。:-)我想到了D是的,那可能真的有用。我将使用chrome.tabs.executeScript
在页面上插入
。注入的脚本将包含一个带有枚举步骤的函数;调用函数并希望它能工作。
var newElem = angular.element('div');
angular.append(newElem);
$compile(newElem)(scope);