Вызов внешней функции javascript через строку URL - PullRequest
1 голос
/ 09 марта 2011

Я хочу использовать javascript в строке URL для манипулирования отображаемым html данной страницы. Обратите внимание, что я не пытаюсь сделать что-то незаконное здесь. Короче говоря, мой университет генерирует еженедельное расписание на основе ваших курсов. Я хотел бы использовать JavaScript для добавления кнопки на странице сгенерированного расписания, которая позволит вам перенести расписание в календарь Google. К сожалению, я не могу просто пойти и отредактировать сам исходный код (очевидно), поэтому я решил, что буду использовать javascript для редактирования страницы, когда она будет отображена моим браузером. У меня возникли проблемы с вызовом внешнего файла javascript для разбора визуализированного html.

Как есть, вот что у меня есть:

javascript:{{var e=document.createElement('script');
e.src = http://www.url.of/external/js/file.js';
e.type='text/javascript';
document.getElementsByTagName('head')[0].appendChild(e);}
functionToCall(document.body.innerHTML);}

Который при вставке в строку URL ДОЛЖЕН добавить мой javascript-файл в заголовок, а затем вызвать мою функцию. Любая помощь будет принята с благодарностью, спасибо!

РЕДАКТИРОВАТЬ: Вот рабочий пример, если вам интересно, спасибо всем!

javascript:(function(){var e=document.createElement('script');
e.src = 'http://www.somewebsite.net/file.js';
e.type='text/javascript';e.onload =function(){functiontocall();};
document.getElementsByTagName('head')[0].appendChild(e);})();

Ответы [ 3 ]

1 голос
/ 10 марта 2011

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

Это генератор букмарклетов, который называется zbooks .
(Да, это мой веб-сайт, нет, я не пытаюсь спамить вас, на этой странице нет объявлений, я ничего не получаю от вас, используя его)

Это JQuery включен, и я думаю, что он прост в использовании (но я его построил, так что, кто знает).Если вам нужно подробное объяснение того, как его использовать, дайте мне знать, чтобы я мог сделать его лучше.Вы можете даже просмотреть источник , если хотите.

Важной частью является бизнес-логика, которая выводит jQuery на страницу:

//s used for the Script element
    var s = document.createElement('script');
    //r used for the Ready state
    var r = false;
    //set the script to the latest version of jQuery
    s.setAttribute('src', 'http://code.jquery.com/jquery-latest.min.js');
    //set the load/readystate events
    s.onload = s.onreadystatechange = function()
    {
/**
 * LOAD/READYSTATE LOGIC
 * execute if the script hasn't been ready yet and:
 * - the ready state isn't set
 * - the ready state is complete
 *   - note: readyState == 'loaded' executes before the script gets called so
 *     we skip this event because it wouldn't have loaded the init event yet.
 */
      if ( !r && (!this.readyState || this.readyState == 'complete' ) )
      {
        //set the ready flag to true to keep the event from initializing again
        r = true;
        //prevent jQuery conflicts by placing jQuery in the zbooks object
        window.zbooks = {'jQuery':jQuery.noConflict()};
        //make a new zbook
        window.zbooks[n] = new zbooks(c);
      }
    };
    //append the jQuery script to the body
    b.appendChild(s);
1 голос
/ 09 марта 2011

Если вам нужно выполнить код после загрузки, вы можете сделать одну из двух вещей:

  1. Выполните functionToCall(document.body.innerHTML); внизу вашего скрипта (http://www.url.of/external/js/file.js), а не в конце вашего букмарклета.

  2. Используйте e.onload = function(){ functionToCall(document.body.innerHTML); }; после e.type='text/javascript' ближе к концу вашего фрагмента JavaScript / букмарклета, вместо вызова functionToCall сразу после добавления e к заголовку документа (поскольку e, скорее всего, не будет иметь был загружен и проанализирован сразу после вызова appendChild(e).

0 голосов
/ 09 марта 2011

Не можете ли вы использовать подходящий инструмент, как Greasemonkey?

...