Как я могу загрузить файл JavaScript, используя букмарклет, который, в свою очередь, не перенаправляет / перезаписывает страницу? - PullRequest
0 голосов
/ 08 сентября 2010

Я пытаюсь загрузить это решение для удаленной отладки для отладки / взаимодействия с DOM / js live. В инструкциях вас попросят поместить блок script и ссылку script на HEAD страницы, чтобы все это заработало. Все в порядке. Это отличный инструмент.

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

Это мой букмарклет:

javascript:(function(){document.body.appendChild(document.createElement('script')).src='http://url-to-js-file.js?x='+(Math.random());})();

А затем «url-to-js-file.js» загружает js для iphonedebug :

ipdConfig = {
    baseUrl: '/ipd/', // trailing slash!
    consoleBaseUrl: 'http://192.168.1.25:8170/' // trailing slash!
}

document.body.appendChild(document.createElement('script')).src='http://192.168.1.25/ipd/ipd.js';

console.log('fin.');

Обратите внимание, что изначально свойство src было "/ipd/ipd.js", как это и предлагается в инструкциях. Но это должно быть абсолютно так, если я хочу, чтобы отладчик работал с другими сайтами.

Моя проблема в том, , что этот код выведет первый js-файл (url-to-js-file.js) на страницу, но когда первый файл попытается вставить другие последовательные файлы, моя страница появляется для перенаправления. На самом деле он не перенаправляет, а просто переписывается. Firebug показывает результирующую страницу без тела, а только файлы ipd js в элементе HEAD.

Почему он это делает?

Это из-за поведения bookmarklet , которое обычно перенаправляет на новую страницу? Я так не думаю. Потому что я использую замыкание в ссылке на букмарклет. И когда я закомментирую строку document.body... файла "url-to-js-file.js", страница останется там, где она есть. Это вложение? Или это может быть что-то в других файлах ipd js, вызывающих это?

Я пытался поместить свой код "url-to-js-file.js" в замыкание, но затем глобальная переменная ipdConfig становится невидимой для остальной части кода ipd, которая его нарушает.

Есть идеи?

1 Ответ

1 голос
/ 08 сентября 2010

Мое лучшее предположение заключается в том, что файл ipd.js использует document.write() где-то в своем коде.В этом случае вам нужно изменить ipd.js, чтобы он этого не делал.

Как я и подозревал, ipd.js написано новичком из JavaScript:

document.write('<script src="' + ipdConfig.baseUrl + '_ipd.js"></script>');

Измените его, чтобы использовать appendChild(createElement(...)).

...