通过url栏调用外部javascript函数

通过url栏调用外部javascript函数,javascript,function,url,external,Javascript,Function,Url,External,我想在url栏中使用javascript来操作给定页面的呈现html。请注意,我并不是想在这里做违法的事情。长话短说,我的大学会根据你的课程制定一个每周时间表。我想使用javascript在生成的日程表页面上添加一个按钮,允许您将日程表推送到google日历上。不幸的是,我不能去编辑源代码本身(显然),所以我想一旦我的浏览器呈现了页面,我会使用javascript来编辑它。调用外部javascript文件来解析呈现的html时遇到一些问题 事实上,这就是我所拥有的: javascript:{{v

我想在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);})();

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

  • 执行
    functionToCall(document.body.innerHTML)位于脚本的底部(http://www.url.of/external/js/file.js)而不是在bookmarklet的末尾

  • 使用
    e.onload=function(){functionToCall(document.body.innerHTML);}e.type='text/javascript'
    之后,而不是在将
    e
    追加到文档头之后立即调用
    functionToCall
    (因为
    e
    很可能不会在调用
    appendChild(e)
    之后立即加载和解析)


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

    我知道你已经接受了一个答案,这是非常有效和伟大的,但我想提供一个我为自己制作的有用工具

    这是一个名为bookmarklet的生成器。
    (是的,这是我的网站,不,我不是想给你发垃圾邮件,那页上没有广告,你使用它我一无所获)

    它支持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);
    

    您不允许任何时间加载您的javascript文件。挂接到
    e.onload
    我有点不确定如何执行此操作。我已尝试
    javascript:{{var e=document.createElement('script');e.src='http://www.impiety.net/calendar.js“;e.type='text/javascript';;document.getElementsByTagName('head')[0]。appendChild(e);e.onload(test())}e.onload(test();}
    似乎都不起作用在你的第一个例子中,你没有在
    e.src=
    之后找到
    。你可能想在谷歌上搜索“bookmarklet”并找到一些例子在网页上运行bookmarklet从来都是不非法的。(*我肯定有人会想出一些方法使它非法)两者似乎都不起作用。也许我构造的.js文件错了?我使用的是
    javascript:{var e=document.createElement('script');e.src='http://www.impiety.net/calendar.js“;e.type='text/javascript';e.onLoad=function(){test();};document.getElementsByTagName('head')[0]。appendChild(e);}”
    但事实并非如此working@Blind--将整个过程封装在一个函数表达式中:
    javascript:
    ,它应该work@Sean维埃拉-你是说把实际的代码体扔进去,还是把上面的东西放进去?因为
    javascript:(function()){var e=document.createElement('script');e.src='http://www.impiety.net/calendar.js“;e.type='text/javascript';e.onLoad=function(){test();};document.getElementsByTagName('head')[0]。appendChild(e);})();
    不起作用。也许您应该尝试更简单的方法,以便调试表达式。一个好主意是打开javascript控制台,以便查看错误。代码段中的明显错误是使用“onLoad”而不是“onLoad”,但也可能有其他的。也许先尝试让它像普通javascript代码一样工作。哇,这真的很奇怪,我发誓我改变了它,但它不工作。也许我在没有意识到的情况下把其他事情搞砸了。不管怎样,非常感谢你们的帮助,你们摇滚乐:D