2011-03-08 140 views
1

我想在url栏中使用javascript来处理给定页面的呈现html。请注意,我不想在这里做一些非法的事情。长话短说,我的大学根据你的课程生成每周的时间表。我想使用JavaScript在生成的日程安排页面上添加一个按钮,以便将日程安排推送到Google日历。不幸的是,我不能只是去编辑源码本身(显然),所以我想我会使用JavaScript来编辑页面,一旦它被我的浏览器渲染。我在调用外部JavaScript文件来解析呈现的html时遇到了一些麻烦。通过url调用外部javascript函数

正因为如此,这是我所:

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);} 

,当粘贴到地址栏,应该增加我的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);})(); 
+2

你不容许任何时候你的JavaScript文件被加载。钩入'e.onload' – Raynos 2011-03-08 23:41:58

+0

我有点不确定如何做到这一点。我试过'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());}'并且都不起作用 – Blind 2011-03-08 23:54:18

+0

您错过了' '在第一个例子中'e.src ='之后。 – 2011-03-09 01:06:17

回答

1

如果您需要的代码来执行,一旦它被装载,你可以做两件事情之一://www.url:

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

  2. 使用e.onload = function(){ functionToCall(document.body.innerHTML); };e.type='text/javascript'靠近你的JavaScript代码/书签结束后,而不是追加e到文档头之后调用functionToCall(因为e将最有可能没有被加载和解析appendChild(e)被称为之后。

+0

似乎都没有工作。也许我构建了我的.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);}'并且它不起作用 – Blind 2011-03-09 00:24:14

+0

@Bind - 将整个东西包装在函数表达式中:'javascript:(function(){// your_code_here ;})();'它应该全部*只是工作* – 2011-03-09 00:33:45

+0

@Sean Vieira - 你是说要把实际的代码体放在那里,还是把它放在那里?因为'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);})();'不起作用 – Blind 2011-03-09 00:59:20

0

不能您使用合适的工具,如Greasemonkey的?

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);