我想在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);})();
答案 0 :(得分:1)
如果您需要在加载代码后执行,您可以执行以下两项操作之一:
执行脚本底部的functionToCall(document.body.innerHTML);
(http://www.url.of/external/js/file.js),而不是书签的末尾。
在JavaScript代码段/书签小结尾附近e.onload = function(){ functionToCall(document.body.innerHTML); };
之后使用e.type='text/javascript'
,而不是在将functionToCall
附加到文档头后立即调用e
在e
被调用后,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这样的合适工具吗?