Загрузка jQuery в chrome-extension

Я пытаюсь сделать первый шаг в волшебный мир Chrome Extensions. Теперь я создал мой манифест, пытаясь загрузить jquery.

{
    "name": "Test Extension",
    "version": "0.1",
    "manifest_version": 2,
    "description": "First try",
    "options_page": "options.html",
    "content_scripts": [{
        "matches": ["chrome-extension://*/*"],
        "js": ["jquery.js", "popup.js"],
        "run_at": "document_end"
    }],
    "browser_action": {
        "default_icon": "icon.png",
        "default_popup": "popup.html",
        "default_title": "Click me!"
    }
}

На самом деле, пытаясь перезагрузить расширение, скажите мне, что "соответствия" не соответствуют допустимой схеме.

Но это не все. Чтобы преодолеть это, я попытался просто изменить значение "matches" на *://*/* и перезагрузить. Ну, расширение, похоже, правильно загружается, но похоже, что jquery не загружен из-за ошибки, которую я могу получить из popup.js, который просто скажет мне

Неподготовлено ReferenceError: $не определено

На самом деле HTML - это просто:

<!doctype html>
<html>
<head>
    <title>Test Extension</title>
    <link rel="stylesheet" style="text/css" src="style.css">
</head>
<body>
    <div id="test"></div>
</body>
</html>
<script type="text/javascript" src="popup.js"></script>

Код popup.js просто делает это:

$("#test").html("Foo!");

Ответ 1

Скрипты содержимого никогда выполняются в контексте расширения. Правильный способ загрузки сценариев в всплывающее окно действия браузера - это включить его в свой код. Пусть ваш файл манифеста:

{
    "name": "Test Extension",
    "version": "0.1",
    "manifest_version": 2,
    "options_page": "options.html",
    "browser_action": {
        "default_icon": "icon.png",
        "default_popup": "popup.html",
        "default_title": "Click me!"
    }
}

И popup.html:

...
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="popup.js"></script>

Ответ 2

$.("#test").html("Foo!");

должен быть

$("#test").html("Foo!");

Ошибка, которую вы получаете, согласуется с неправильной частью этой части.