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