Расширение Chrome: внедрение внешнего скрипта - PullRequest
3 голосов
/ 12 июля 2011

Я создаю расширение Chrome, которое добавляет тег script на страницу, а затем использует код, определенный в этом внешнем сценарии:

$('body').append('<script src="..."></script><script>console.log(SomeObject)</script>');

SomeObject определено во внешнем сценарии,так что я должен иметь возможность получить к нему доступ, верно?Ну, я не могу, так как получаю «неопределенную» ошибку.

Я даже пытался использовать head.js для загрузки внешнего скрипта и выполнения функции после загрузки скрипта, но безрезультатно.

Если я открою консоль Chrome, я смогу получить доступ к проклятому объекту очень хорошо !!!

Я пробовал и скрипт содержимого, и executeScript на фоновой странице, но безрезультатно.В обоих случаях, если я использую console.log(window), я могу осмотреть объект window в консоли, а SomeObject нигде не найти.Если я проверю объект window на консоли Chrome, то он окажется там!

Вставлены ли как-то песочницы в инъекционные сценарии или что дает?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 12 июля 2011

Вот что наконец сработало:

var script = document.createElement('script');
script.src = "...";
script.addEventListener('load', function() {
  // SomeObject is available!!!
});
document.head.appendChild(script);

Интересно, почему ни один из других методов не работал ...

1 голос
/ 30 июля 2011

Так что, похоже, вы не можете из-за ограничений безопасности: (

Мне пришлось взломать его, используя iframe (как ни странно, iframe может получить доступ к родительскому документу).

1 голос
/ 12 июля 2011

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

<script src="..."></script><script>setTimeout(function() {console.log(SomeObject)}, 3000)</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...