Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Chrome extension注入javascript并单击浏览器上的angular操作_Javascript_Jquery_Angularjs_Google Chrome Extension_Manifest - Fatal编程技术网

Chrome extension注入javascript并单击浏览器上的angular操作

Chrome extension注入javascript并单击浏览器上的angular操作,javascript,jquery,angularjs,google-chrome-extension,manifest,Javascript,Jquery,Angularjs,Google Chrome Extension,Manifest,我有一个扩展,我只在任何页面中注入javascript,但当我注入它时,我的angular模块和所有控制器都不工作。我也应该注射还是做些别的 injection.js chrome.browserAction.onClicked.addListener(function (tab) { chrome.tabs.executeScript(tab.id, { file: 'src/injection.js' }, function () { cons

我有一个扩展,我只在任何页面中注入javascript,但当我注入它时,我的angular模块和所有控制器都不工作。我也应该注射还是做些别的

injection.js

chrome.browserAction.onClicked.addListener(function (tab) {
    chrome.tabs.executeScript(tab.id, {
        file: 'src/injection.js'
    }, function () {
        console.log("Script injected!");
    });
});
'use strict';
var cheapWatcherDiv = document.createElement('div');
cheapWatcherDiv.setAttribute('class', 'cheap-watcher');
document.body.appendChild(cheapWatcherDiv);
var logged = false;
if (logged == false) {
    $(".cheap-watcher").load(chrome.extension.getURL('views/main.html'));
    $('head').append('<link rel="stylesheet" href="' + chrome.extension.getURL('sass/main.css') + '" type="text/css" />');
} else {
    $(".cheap-watcher").load(chrome.extension.getURL('views/logoutTemplate.html'));
}
app.js

angular.module('app', ['ngRoute', 'ui.router'])
    .run(function ($rootScope) {
        $rootScope.message = "Hello Angular again!";
        $rootScope.successMsg = "Hello Angular again! SUCCESS!";
});
injection.js

chrome.browserAction.onClicked.addListener(function (tab) {
    chrome.tabs.executeScript(tab.id, {
        file: 'src/injection.js'
    }, function () {
        console.log("Script injected!");
    });
});
'use strict';
var cheapWatcherDiv = document.createElement('div');
cheapWatcherDiv.setAttribute('class', 'cheap-watcher');
document.body.appendChild(cheapWatcherDiv);
var logged = false;
if (logged == false) {
    $(".cheap-watcher").load(chrome.extension.getURL('views/main.html'));
    $('head').append('<link rel="stylesheet" href="' + chrome.extension.getURL('sass/main.css') + '" type="text/css" />');
} else {
    $(".cheap-watcher").load(chrome.extension.getURL('views/logoutTemplate.html'));
}

在google chrome中存在三种类型的脚本()。所有这些脚本都有自己的上下文

在您的例子中,angularjs库只能通过内容脚本访问。如果您想在注入的脚本中访问angularjs和控制器,您也需要注入它们。在注入这些脚本时,请确保仅在加载上一个脚本时注入下一个脚本

将其放在顶部的
src/injection.js

function injectJavaScripts(urls) {

    var elements = [];
    urls.forEach(function (url) {
        var s = document.createElement('script');
        s.src = chrome.extension.getURL(url);
        elements.push(s);
    });

    var target = document.head || document.documentElement;
    var i = 0;
    var patchNext = function () {
        if (i >= elements.length) return;
        else if (i > 0) {
            elements[i - 1].onload = null;
        } 

        elements[i].onload = patchNext;
        target.appendChild(elements[i]);

        i += 1;
    };

    patchNext();
};

injectJavaScripts([
    "lib/jquery/dist/jquery.min.js",
    "lib/angular/angular.js",
    "lib/angular-route/angular-route.min.js",
    "lib/ui-router/release/angular-ui-router.min.js",
    "lib/angular-sanitize/angular-sanitize.min.js",

    "src/app.js",
    "src/LoginController.js",
    "src/LogoutController.js",
    "src/MainController.js"
 ]);

让我知道这是否也适用于您。

您需要注入所有javascript文件。你能告诉我你在哪里加载
angular.js
app.js
?我更新了我的问题@NikasŽalias你能帮我做点事吗samecan你能给我你的git吗?很好!非常感谢:-@AdnanUmer