Я пытаюсь использовать скрипт содержимого для ввода собственных файлов JS на страницу. Способ, которым я пытаюсь это сделать, основан на системе, используемой расширением Chrome, которое называется dotjs, которое запускает небольшой сервер на вашем компьютере, и делает AJAX reuests на localhost, чтобы получить файлы с этого сервера.Сообщения, которые не отправляются из сценария содержимого в background.js
Я уверен, что те запросы AJAX будут проходить только в том случае, если они отправлены из background.js, а не из сценария контента из-за той же политики происхождения. Мне также нужно использовать webRequest, который снова работает только на фоновой странице. Но, поскольку мне нужно вводить материал на страницу, мне нужен сценарий содержимого. Таким образом, мое расширение работает со сценарием контента, который отправляет сообщения на справочную страницу, запрашивая, чтобы он выполнял все необходимые запросы webRequest и AJAX.
Проблема в том, что сообщения, похоже, не получаются background.js. У меня есть console.log() s в обработчике onRequest в background.js, как вы можете видеть, и они не отображаются в моей консоли.
manifest.json
{
"name": "dotjs",
"version": "1.5",
"description": "~/.js",
"icons": { "48": "icon48.png",
"128": "icon128.png" },
"content_scripts": [{
"all_frames": true,
"run_at": "document_start",
"matches": ["[censored]"],
"js": ["dotjs.js"]
}],
"background": {
"scripts": ["jquery.js", "background.js"]
},
"permissions": ["tabs", "webRequest", "extension"]
}
dotjs.js
console.log("dotjs.js running");
var requestFilter =
{
url: "[censored]"
};
var blockingResponse =
{
redirectUrl: "http://localhost:2262/Pigman/ips.chat.js"
};
function requestInterceptor(details)
{
return blockingResponse;
}
chrome.extension.sendRequest(
{
type: "setListener",
func: requestInterceptor,
filter: requestFilter
}
);
chrome.extension.sendRequest(
{
type: "loadJS",
filename: "Elizabot/elizabot.js"
},
function (response) { eval(response); }
);
chrome.extension.sendRequest(
{
type: "loadJS",
filename: "Elizabot/elizadata.js"
},
function (response) { eval(response); }
);
background.js
function loadJSFile(filename)
{
$.ajax({
url: 'http://localhost:2262/Pigman/' + filename + '.js',
dataType: 'text',
success: function(d){
return d;
},
error: function(){
console.log('no file found at localhost:2262/' + filename + '.js')
}
});
}
chrome.extension.onRequest.addListener(
function(request, sender, sendResponse)
{
console.log("background.js received request:");
console.log(request);
if (request.type == "setListener")
{
chrome.webRequest.onBeforeRequest.addListener(request.func, request.filter);
}
if (request.type == "loadJS")
{
sendResponse(loadJSFile(request.filename));
}
}
);
Спасибо, теперь мне стало намного легче, я вижу консольный вывод. Я чувствую себя очень потерянным в мире расширений Chrome, потому что я не мог найти никаких хороших учебников, и официальная документация берет очень спартанский подход. –
[Официальная документация] (http://code.google.com/chrome/extensions/devguide.html) является достойной ссылкой. Если вы нуждаетесь в советах, трюках и примерах, просмотрите [мои ответы в теге google-chrome-extension] (http://stackoverflow.com/search?tab=relevance&q=user%3a938089%20 [google- хром-расширение]). Обычно я добавляю демо к своим ответам и всегда включаю соответствующие ссылки. –