如何添加外部javascript文件并通过bookmarklet运行函数?
嗨,我正在尝试制作一个javascript书签,它将外部javascript源的链接添加到一个脱离域的页面。但是,当我运行bookmark时,什么也没有发生。请不要出错,页面上的代码也不会更改。有什么想法吗?这是我正在尝试使用的书签。谢谢你抽出时间如何添加外部javascript文件并通过bookmarklet运行函数?,javascript,bookmarklet,Javascript,Bookmarklet,嗨,我正在尝试制作一个javascript书签,它将外部javascript源的链接添加到一个脱离域的页面。但是,当我运行bookmark时,什么也没有发生。请不要出错,页面上的代码也不会更改。有什么想法吗?这是我正在尝试使用的书签。谢谢你抽出时间 javascript:(function(){document.body.appendChild(document.createElement('script')).src='http://mycode.com/autopopulator.js';a
javascript:(function(){document.body.appendChild(document.createElement('script')).src='http://mycode.com/autopopulator.js';autopopulate();})();
我从未尝试过创建bookmarklet。但是我在网上找到了这个包含jQuery的示例,它可能对您有所帮助 它解释了如何链接到外部JS文件并在其中合并其他文件,但我认为您需要的是:
<a href="javascript:(function(){var head=document.getElementsByTagName('head')[0],script=document.createElement('script');script.type='text/javascript';script.src='http://www.site.com/your-javascript.js?' + Math.floor(Math.random()*99999);head.appendChild(script);})(); void 0">Your Bookmarklet Name</a>
您需要添加
function writeTags(){
//write the script tags
}
function check(){
// example for prototype library
if(window.Prototype && Prototype.Version){
doActualWork();
}else{
window.setTimeout(check, 200);
}
}
function doActualWork(){
// this your actual code that requires
// the loaded library
}
writeTags();
check();
您还可以通过回调来实现这一点:
var addScript=function(filename,callback){
var e=document.createElement('script');
e.type = 'text/javascript';
e.src = filename;
if(callback){
e.onloadDone=false;//for Opera
e.onload=function(){e.onloadDone=true;callback();};
e.onReadystatechange=function(){
if(e.readyState==='loaded'&& !e.onloadDone){
e.onloadDone=true;callback();
}
}
}
if(typeof(e)!=='undefined'){
document.getElementsByTagName('head')[0].appendChild(e);
}
}
addScript('http://yoursite.com/js/yourScript.js',function(){functionFromYourScript();});
(当然,您会想优化它以将其塞进bookmarklet中,但是您得到了这个想法……您可能正确地添加了script标记。我怀疑问题在于,您必须等待浏览器加载脚本,然后该函数调用才能工作。这仍然没有显示任何更改。这就好像它根本没有改变页面上的任何内容。我很好奇,通过检查脚本中的对象,我能完成什么?如果你找到了对象,你就知道脚本已经加载,你可以使用它的方法。在使用librariesheh时,这是JavaScript中的一个常见检查,结果是我自己也需要它,所以这里是压缩版本(您只需要在末尾添加带有回调的函数调用)JavaScript:var www=function(f,c){var e=document.createElement(“script”);e.type=“text/JavaScript”;e.src=f;if(typeof(e)!=“undefined”){if(c){e.onloadDone=false;e.onloadDone=function(){e.onloadDone=true;c()};e.onReadystatechange=function(){if(e.readyState==“loaded”&&&&!e.onloadDone){e.onloadDone=true;c(e.innerHTML)}}document.getElementsByTagName(“head”)[0]。appendChild(e)};