javascriptだけを任意のページに挿入する拡張機能がありますが、それを挿入すると、Angularモジュールとすべてのコントローラーが機能しません。私もそれらを注入するべきですか、それとも何か他のことをするべきですか?
インジェクション.js
chrome.browserAction.onClicked.addListener(function (tab) {
chrome.tabs.executeScript(tab.id, {
file: 'src/injection.js'
}, function () {
console.log("Script injected!");
});
});
app.js
angular.module('app', ['ngRoute', 'ui.router'])
.run(function ($rootScope) {
$rootScope.message = "Hello Angular again!";
$rootScope.successMsg = "Hello Angular again! SUCCESS!";
});
インジェクション.js
'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'));
}
マニフェスト
...
"content_scripts": [
{
"run_at": "document_end",
"matches": [
"http://*/*",
"https://*/*"
],
"js": [
"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"
]
}
]
グーグルクロームには3種類のスクリプトがあります(続きを読む)。これらのスクリプトにはすべて、独自のコンテキストがあります。
あなたの場合、angularjslibにはコンテンツスクリプトからのみアクセスできます。挿入されたスクリプト内で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"
]);
それがあなたにもうまくいくかどうか私に知らせてください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加