2015-03-30 3 views
1

Я пытаюсь использовать jquery для создания сообщения ajax-вызова, и я пробовал почти все решения на SO, но ни один из них не работает. Мой манифест:Невозможно использовать jquery в расширении google chrome

{"name": "__MSG_extName__", 
"version": "0.1", 
"manifest_version": 2, 
"description": "__MSG_extDesc__", 
"icons": {"16": "icon16.png", "128": "icon128.png"}, 
"background": {"persistent": false, "scripts": ["background.js"]}, 
"default_locale": "en", 
"content_scripts": [ 
{ 
    "matches": ["<all_urls>"], 
    "js": ["jquery-2.1.3.js"] 
} 
], 
"permissions": ["contextMenus", "downloads", "downloads.open", "tabs", "http://*/*", "https://*/*"]} 

Файл background.js, как:

chrome.downloads.onCreated.addListener(function(downloadItem) { 

console.log("Download Link is " + downloadItem.url) 
chrome.tabs.executeScript(null, { file: "jquery-2.1.3.js" }, function() { 
console.log("jquery is loaded"); 
var linkSync = { 
    "document": { 
     "downloadLink": downloadItem.url, 
     "isSynced": false}, 
    "safe": true 
    }; 

$.post("url/to/post", 
     linkSync, 
     function(data) { 
     console.log("Success" + data); 
    }); 
}); 

}); 

ошибка, я получаю это:

Download Link is http://www.mymp3song.com/files/download/id/33724 
background.js:14 jquery is loaded 
extensions::uncaught_exception_handler:8 Error in response to tabs.executeScript: ReferenceError: $ is not defined 
at Object.callback (chrome-extension://kbhkaajolcelehoonafmkgaahfgphnok/background.js:22:2) 
at chrome-extension://kbhkaajolcelehoonafmkgaahfgphnok/background.js:13:16 

Как вы можете видеть, я добавил jquery.js как программно, так и в манифесте, но ни один из них не работает. Даже если я удалю их, это не сработает. Может ли кто-нибудь указать мне, что я должен сделать, чтобы он работал?

ответ

2

Если вы хотите JQuery функционировать в фоновой странице, вам нужно добавить его к фону страницы.

Оба метода, которые вы пытаетесь использовать, вместо этого добавляют код к контексту сценария содержимого.

Что вам нужно это:

"background": { 
    "persistent": false, 
    "scripts": ["jquery-2.1.3.js", "background.js"] 
}, 

загрузить JQuery в фоновой странице. Обратите внимание, что порядок имеет значение.

Я бы порекомендовал вам взглянуть на Architecture Overview.

+0

Да, я подумал, что прежде чем смотреть на ваш ответ и собирался опубликовать. В любом случае спасибо! –

-1

измените ваш JSON к этому, и он будет работать для и ссылки является Here

"content_scripts": [ { 
    "js": [ "jquery.min.js", "background.js" ], 
    "matches": [ "http://*/*", "https://*/*"] 
    }] 
+0

я бы немного изменить этот ответ для удовлетворения какой версии JQuery вы используете: ' "content_scripts": [{ "JS": [ "[Jquery FILE NAME ЗДЕСЬ]", "background.js" ], "matches": ["http: // */*", "https: // */*"] }] ' – iamryandrake

+0

Я использую jquery version 1.8.3 –

+0

Я использую только фоновый скрипт, поэтому добавление сценарий содержимого может быть не очень хорошей идеей. Во всяком случае, я сделал то, что вы сказали, и это не сработало. –

Смежные вопросы