В расширении Chrome контентные скрипты не могут влиять внутри iframe? - PullRequest
5 голосов
/ 10 июля 2011

В файле manifest.json я заявляю, что хочу внедрить некоторые сценарии, например:

{
    "name": "my extension",

    "version": "1.0",

    "background_page": "background.html",

    "permissions": ["contextMenus", "tabs", "http://*.example.com/*"],

    "content_scripts": [
        {
            "matches":
                [
                "http://*.taobao.com/*",
                "http://*.yintai.com/*"
                ],
            "run_at": "document_idle",
            "js": ["jquery-1.5.1.min.js","jquery-ui-1.8.13.custom.min.js", "contentscript.js"],
            "all_frames": true
        }
    ]
}

В скрипте содержимого, среди прочего, я создаю iframe. Пока все отлично работает. Как это:

$('<div id="my_notifier"></div>').appendTo($('body')).html('<iframe src="http://example.com"></iframe>');

Проблема в том, что внутри iframe он ничего не наследует от скриптов содержимого. Если я хочу использовать jQuery, я должен использовать <script src=..., чтобы снова включить его в iframe.

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

Я пробовал атрибут "all_frames": true, но он не работает.

Пожалуйста, сообщите. Спасибо.

Редактировать: я добавил example.com в атрибут matches следующим образом:

"content_scripts": [
    {
        "matches":
            [
            "http://*.taobao.com/*",
            "http://*.yintai.com/*", 
            "http://*.example.com/*"
            ],
        "run_at": "document_idle",
        "js": ["jquery-1.5.1.min.js","jquery-ui-1.8.13.custom.min.js", "contentscript.js"],
        "all_frames": true
    }
]

Но это не работает.

Чтобы быть более понятным, скажите, что содержимое iframe (example.com):

<!DOCTYPE HTML>

<html>
<head>
    <title>Untitled</title>
</head>

<body>

<div></div>

<script type="text/javascript">
    $('div').html('hi');  

</script>

</body>
</html>

Будет ошибка: $ не определено

Чтобы это работало, я должен использовать:

<!DOCTYPE HTML>

<html>
<head>
    <title>Untitled</title>
</head>

<body>

<div></div>

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
<script type="text/javascript">
    $('div').html('hi');  

</script>

</body>
</html>

Ответы [ 3 ]

5 голосов
/ 11 июля 2011

Вам необходимо добавить URL-адрес вашего iframe http://example.com в список и указать, какие сценарии содержимого нужно внедрить:

 "content_scripts": [
        {
            "matches":
                [
                "http://*.taobao.com/*",
                "http://*.yintai.com/*"
                ],
            "run_at": "document_idle",
            "js": ["jquery-1.5.1.min.js","jquery-ui-1.8.13.custom.min.js", "contentscript.js"]
        },{
            "matches":["http://example.com/*"],
            "run_at": "document_idle",
            "js": ["jquery-1.5.1.min.js"],
            "all_frames": true
        }
    ]
0 голосов
/ 31 декабря 2012

Если для вас важна производительность, если я порекомендую вам использовать чистый javascript вместо jQuery, и разница в производительности будет заметна для тяжелых страниц, содержащих несколько фреймов; особенно если вы используете функции jquery, такие как append и , filter и сложные селекторы .

0 голосов
/ 16 августа 2011

Ответ довольно прост:

  • Проверить, обновлена ​​ли новая вкладка
  • Ваш URL?
  • Выполните нужный скрипт

динамическое развертывание сценариев содержимого в расширениях Chrome

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...