2012-04-28 1 views
9

Я хотел бы добавить несколько локальных файлов .js на веб-страницу. Я имею в виду клиентскую сторону, как в моем браузере, мне не нужен кто-либо другой доступ к странице, чтобы увидеть ее. Мне просто нужно взять файл .js, а затем сделать так, чтобы файл был включен в html страницы через тег <script>.Вложить локальный файл .js на веб-страницу?

Это нормально, если потребуется секунда после того, как страница загрузилась для того, чтобы материал в локальных файлах был доступен.

Это нормально, если я должен быть на компьютере, чтобы сделать это «вручную» с помощью консоли или чего-то еще.

Я пытался сделать это в течение двух дней, я пробовал Greasemonkey, я пробовал вручную загружать файлы с помощью консоли JavaScript. Меня поражает, что нет (по-видимому) установленного способа сделать это, кажется, что такая простая вещь хочет сделать. Я думаю, что простой - это не то же самое, что и общее.

Если это помогает, причина, по которой я хочу это сделать, - запустить чатбот на чат-клиенте на основе JS. Некоторые из кода бота смешиваются с ранее существующим кодом чата - для этого у меня есть Fiddler, перехватывающий запросы на .../chat.js и заменяющий его локальным файлом. Но у меня есть два файла .js, которые «независимы» от всего, что есть на самой странице. На странице нет файлов .js, на которые я могу их заменить, поэтому я не могу использовать Fiddler.

+1

Попробуйте плагин firebug firefox. – KBN

+0

У меня это установлено - но что мне с ним делать? Создание тега сценария и добавление его в DOM через консоль JS не похоже на трюк. Он добавляется в dom и содержимое файла загружается, но если я пытаюсь получить доступ к любой объявленной в нем переменной, я все равно получаю «неопределенный». –

+0

Это можно легко выполнить в расширении браузера. –

ответ

3

Так как ваш уже используя стельку сценарий, вы можете сделать что-то подобное в OnBeforeResponse(oSession: Session) функции

if (oSession.oResponse.headers.ExistsAndContains("Content-Type", "html") && 
     oSession.hostname.Contains("MY.TargetSite.com")) { 

     oSession.oResponse.headers.Add("DEBUG1_WE_EDITED_THIS", "HERE"); 

     // Remove any compression or chunking 
     oSession.utilDecodeResponse(); 

     var oBody = System.Text.Encoding.UTF8.GetString(oSession.responseBodyBytes); 

     // Find the end of the HEAD script, so you can inject script block there. 
     var oRegEx = oRegEx = /(<\/head>)/gi 
     // replace the head-close tag with new-script + head-close 
     oBody = oBody.replace(oRegEx, "<script type='text/javascript'>console.log('We injected it');</script></head>"); 

     // Set the response body to the changed body string 
     oSession.utilSetResponseBody(oBody); 
    } 

Рабочий пример www.html5rocks.com:

if (oSession.oResponse.headers.ExistsAndContains("Content-Type", "html") && 
     oSession.hostname.Contains("html5rocks")) { //goto html5rocks.com 
     oSession.oResponse.headers.Add("DEBUG1_WE_EDITED_THIS", "HERE"); 
     oSession.utilDecodeResponse(); 
     var oBody = System.Text.Encoding.UTF8.GetString(oSession.responseBodyBytes); 
     var oRegEx = oRegEx = /(<\/head>)/gi 
     oBody = oBody.replace(oRegEx, "<script type='text/javascript'>alert('We injected it')</script></head>"); 
     oSession.utilSetResponseBody(oBody); 
    } 

Обратите внимание, вы должны включить потоковое выключить в стельку: http://www.fiddler2.com/fiddler/help/streaming.asp и я предполагаю, что вы должны были бы расшифровать HTTPS: http://www.fiddler2.com/fiddler/help/httpsdecryption.asp

Я использовал скрипач сценарий все меньше и меньше, в пользу скрипача .Net Extensions - http://fiddler2.com/fiddler/dev/IFiddlerExtension.asp

+0

Спасибо, я новичок в Fiddler и даже не понимаю, что у него есть такая функциональность! Это решение работает, и мой бот теперь поддерживает elizabot.js. Единственная икота заключалась в том, что Firefox отказывается запускать локальные .js-файлы, поэтому мне пришлось поместить файлы на сервер Apache на моем ноутбуке и получить их оттуда через локальную сеть. Поговорите о kluge, но он работает. –

+1

Добро пожаловать! BTW, вы можете сделать что-то подобное, чтобы прочитать файл и вставить весь файл в блок сценария: \t \t \t var lines = System.IO.File.ReadAllLines ("C: \\ TMP \\ TEST.JS"); \t \t \t var str = String.Join ("\ n", lines); \t \t \t oBody = oBody.replace (oRegEx, ""); – eSniff

+1

Да, я понял, что после того, как я сделал этот комментарий и внедрил его во второй половине дня :) –

0

Как насчет использования jQuery.getScript() метода jquery?

http://api.jquery.com/jQuery.getScript/

+1

Не нужно ли, чтобы страница, о которой идет речь, уже использовала jQuery? Потому что в противном случае я просто попадаю в Catch 22 - мне нужно jQuery, чтобы вставить .js, и мне нужно ввести jj для использования jQuery. –

0

сохранить нормальные HTML страницы в файловой системе, добавьте JS файлы вручную вручную, а затем с помощью скрипача перехватить эти звонки, так что вы получите вашу версию файла HTML

+0

Я должен был упомянуть, что я думал об этом - к сожалению, это не html-страницы.Это PHP, и я не могу воспроизвести обработку на стороне сервера, поскольку он включает проверку подлинности и доступ к базе данных. –

4

Если вы используете Chrome, тогда зайдите в dotjs.

Он будет делать именно то, что вы хотите!

+0

Это выглядит действительно интересно, к сожалению, компьютер, на котором я запускаю этот бот, сейчас работает с Win2k (не спрашивайте), поэтому нет Chrome. В лучшем мире вы, возможно, получили Принятый ответ. :( –

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