Имею javascript-код, отрабатывающий в событии onpageload в chrome (неймспейсе, в котором работают аддоны, а не Google Chrome), не имеющий доступа к javascript-объектам и функциям, определенными на странице, которые мне, конечно же, очень надо вызвать.
Поступаю следующим образом:
// Работает
var script = doc.createElement('script');
script.setAttribute('type', 'text/javascript');
script.innerHTML = 'function alert_1() { alert("1"); }';
var body = doc.getElementsByTagName('body')[0];
body.appendChild(script);
start.setAttribute('onclick', 'alert_1()');
При нажатии на start alert отрабатывает - отлично.
Проблема в том, что в реальной задаче нужно выполнить достаточно сложный код, пихать который в однострочник ни руками, ни генераторами кода не хотелось бы. start.AddEventHandler('click', function alert_1() { ... }, ..) отпадает по той причине, что в реальной задаче потребуется вызывать функции, определенные в javascript-е страницы, а как мы помним, из chrome такая возможность недоступна.
Решение кажется очевидным - подгрузить код из внешнего файла через аттрибут src:
var script = doc.createElement('script');
script.setAttribute('type', 'text/javascript');
script.setAttribute('src', 'chrome:///myext/contents/alert_1.js');
var body = doc.getElementsByTagName('body')[0];
body.appendChild(script);
start.setAttribute('onclick', 'alert_1()');
Но не тут-то было. Код, подгруженный тегом <script>, виден в firebug, но не отрабатывает. Соответственно, при нажатии на start в консоли видно сообщение об отсутствии метода alert_1().
Судя по всему, javascript элементарно не подгружается из-за того, что страница, вроде как, уже загружена. Можно ли как-то силой заставить его подгрузиться?