通过url栏调用外部javascript函数

时间:2011-03-08 23:38:56

标签: javascript function url external

我想在url栏中使用javascript来操作给定页面的渲染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 个答案:

答案 0 :(得分:1)

如果您需要在加载代码后执行,您可以执行以下两项操作之一:

  1. 执行脚本底部的functionToCall(document.body.innerHTML);(http://www.url.of/external/js/file.js),而不是书签的末尾。

  2. 在JavaScript代码段/书签小结尾附近e.onload = function(){ functionToCall(document.body.innerHTML); };之后使用e.type='text/javascript',而不是在将functionToCall附加到文档头后立即调用ee被调用后,appendChild(e)很可能不会被加载和解析。

答案 1 :(得分:1)

我看到你已经接受了答案,这是完全有效和伟大的,但我想提供一个我为自己制作的有用工具。

这是一个名为zbooks的书签生成器 (是的,这是我的网站,不,我没有试图向你发送垃圾邮件,该页面上没有广告,我从中获得的任何内容都没有获得)

启用了jQuery,我认为它使用起来很简单(但是我构建了它,所以谁知道)。如果您需要有关如何使用它的详细说明,请告诉我,以便我可以做得更好。如果您愿意,甚至可以browse over the source

重要的部分是在页面上获取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);

答案 2 :(得分:0)

你不能使用像Greasemonkey这样的合适工具吗?