Почему копирование и вставка вывода dart2js в консоль не работает?

скомпилируйте следующий код с dart2js -o test.js test.dart

открыть test.js, скопировать его содержимое

откройте браузер, перейдите на stackoverflow.com

откройте инструменты разработчика, перейдите на вкладку консоли

вставьте содержимое test.js в консоль, нажмите Enter

Я ожидаю, что он нажмет кнопку «Задать вопрос», но этого не происходит, почему?

(Причина, по которой я хочу это сделать, заключается в том, что мне нужны js, но я не хочу их трогать.)

// test.dart
import 'dart:html';
void main() {
  document.querySelector('#nav-askquestion').click();
}

person Not an ID    schedule 21.01.2015    source источник


Ответы (1)


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

Я заработал, запустив этот код в консоли разработчика

(function runTest() {
  var s = document.createElement("script");
  s.type = "text/javascript";
  s.src = "test.js";
  document.body.appendChild(s);}
)();

где файл test.js (сгенерированный вывод из dart2js) находится в том же каталоге, что и файл index.html.

Код добавляет тег script, динамически ссылающийся на вывод dart2js, и код в test.js выполняется.

person Günter Zöchbauer    schedule 21.01.2015