2012-01-09 2 views
0

Я пытаюсь запустить команду javascript в сценарии содержимого с помощью Personalized-Web (расширение Chrome). Я новичок в яваскрипте & JQuery, но я обнаружил, что ввод этого кода:Javascript в браузере и в скрипте содержимого - «die» не работает

javascript:jQuery("div.photo-container").die(); 

в мою строку браузера на определенной странице достигает желаемый результат: он расстегивает на .live вызов выполняется в одном из данной страницы JavaScripts.

Однако, если я включаю тот же код или $("div.photo-container").die(); в сценарий содержимого, он не работает. Я также попытался включая этот тег сценария в контексте страницы:

<script type="text/javascript"> 
    $("div.photo-container").die(); 
</script> 

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

Итак, в чем разница между панелью браузера, сценарием контента и тегом на странице <script>? Как я могу использовать один из «автоматических» методов (т. Е. Не вставлять его в панель браузера)?

+0

jQuery, должно быть, был загружен в какой-то момент для первого примера работы. Вы уверены, что на странице нет других скриптов, даже в конце ''? – PPvG

+0

@PPvG - есть много сценариев, разбросанных по всей странице. Наверное, я должен был охотиться за ними, чтобы узнать, загружен ли jQuery? – keflavich

+0

Нет, извините, я прочитал вашу первую строчку. Посмотрите на [ответ Мухаммеда] (http://stackoverflow.com/a/8796140/990877) и прочитайте документацию по [Скриптам контента Chrome] (http://code.google.com/chrome/extensions/content_scripts.html) , – PPvG

ответ

2

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

// Runs in the context of the webpage. 
var injectScript = function() { 
    $("div.photo-container").die(); 
} 

// Runs in the context of the content script. We basically just append the DOM 
// with the injected script and execute it so it will run. 
var script = document.createElement('script'); 
script.appendChild(document.createTextNode('(' + injectScript + ')();')); 
document.body.appendChild(script); 

Вышеприведенное должно работать, если ваша страница определила $. Если $ не существует, это означает, что jQuery еще не загрузился. Убедитесь, что ваш манифест имеет значение document_end.

... 
"content_scripts": [ 
    { 
    "matches": ["http://www.rim.com/*"], 
    "js": ["content_script.js"], 
    "run_at": "document_end" 
    } 
], 
... 

Если это не сработает, то иногда в зависимости от сайта, это хорошо ленивой нагрузки или смарт нагрузки до содержания (сценарий) загружается, потому что вебдизайнер асинхронно загрузки скриптов или контента. В этом случае выполните некоторые исследования, чтобы узнать, как загружается jquery. Например, выполните таймер с setTimeout или событиями DOM, чтобы выяснить, когда пришло время запуска вашей инъекции. Я делаю это много раз на сложных сайтах, таких как Google+ Extensions.

+0

Спасибо. Ваше решение именно то, что я искал. Тем не менее, теперь я получаю следующую ошибку: 'Uncaught TypeError: Невозможно вызвать метод 'die' of null'. Он работает ('live' функция' die'd, как и следовало бы, но все еще есть эта ошибка. Не большое дело, я просто хочу убедиться, что я ничего не сломаю. – keflavich

+0

Я не знаю, что 'die()' в этом отношении, попробуйте 'console.log ($ ('div.photo-container'))' и посмотреть, распечатает ли он –

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