2014-07-29 5 views
9

Я пытаюсь ввести кнопку на страницу с помощью скриптов содержимого Chrome, но кнопка никогда не появляется, и я не вижу ошибки в консоли.Вводная кнопка на сайт (скрипт содержимого Chrome Extension)

Мой manifest.json файл:

{ 
    "name": "Test", 
    "version": "0.0.1", 
    "manifest_version": 2, 
    "description": "Test", 
    "default_locale": "en", 
    "permissions": [ 
    "<all_urls>" 
    ], 
    "content_scripts": [ 
    { 
     "matches": [ 
     "<all_urls>" 
     ], 
     "js": [ 
     "src/inject/inject.js" 
     ] 
    } 
    ] 
} 

и мой inject.js файл:

document.addEventListener('DOMContentLoaded', function() { 
    var buttonOnSite = document.getElementById("buttonOnSite"); 
    var button = document.createElement("button"); 
    var text = document.createTextNode("test"); 
    button.appendChild(text); 
    buttonOnSite.appendChild(button); 
}); 

Что я ожидаю от приведенного выше кода, когда я иду к месту, где кнопка с идентификатором buttonOnSite существует , после него создается новая кнопка с текстом test.

Но ничего не происходит, когда я иду на этот сайт с помощью кнопки! Существует определенно кнопка с идентификатором buttonOnSite (я изменил идентификатор здесь, потому что это длинный идентификатор).

В консоли не появляется сообщение об ошибке, так что что случилось? Это, наверное, что-то очевидное, но я просто не вижу этого. Любая помощь приветствуется!

ответ

4

Это код, который нужно:

var buttonOnSite = document.getElementById("buttonOnSite"), 
    parent = buttonOnSite.parentElement, 
    next = buttonOnSite.nextSibling, 
    button = document.createElement("button"), 
    text = document.createTextNode("test"); 

button.appendChild(text); 
if (next) parent.insertBefore(button, next); 
else parent.appendChild(button); 
+0

Я до сих пор ничего не получаю! После 'buttonOnSite' нет элемента. Поэтому я хочу создать новую кнопку после 'buttonOnSite'. – downloader

+0

Похоже, проблема связана с 'addEventListener'. Я добавил некоторые «console.log» в eventlistener, и никто из них не запустился. Но они бежали, когда я выставлял их вне eventlistener. Есть идеи? – downloader

+0

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

3

По умолчанию содержимое скрипты запускаются после DOM загружен. Это означает, что вы добавляете слушателя событий после того, как событие было запущено, поэтому ваш слушатель никогда не слышит его. Удалите первую и последнюю строки вашего javascript.

+0

Это все еще не работает. Ничего не произошло! См. Мой второй комментарий к другому ответу. Вы знаете решение? – downloader

+0

Теперь я получаю сообщение об ошибке 'Uncaught TypeError: Не могу прочитать свойство appendChild 'null. Но сообщения 'console.log' никогда не появляются – downloader

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