【问题标题】:Safari 5 changes on use of javascript bookmarklets?Safari 5 更改了使用 javascript 小书签?
【发布时间】:2011-09-06 16:51:19
【问题描述】:

现在 Safari 5 使用 javascript 小书签作为书签或书签栏中的链接是否有长度限制或其他更改?

下面的小书签在 Safari 4 中有效,但在 Safari 5 中我收到错误消息“Safari 无法使用 Javascript 执行此操作。”它似乎与打开一个新窗口没有任何关系,因为下面的第二个脚本在 5 中工作并打开一个新窗口。

是否有其他方法可以将 javascript 用于浏览器操作,无论是作为书签还是 Safari 扩展程序?

10/07/11 更新:

Bookmarklet 现在可以在 Safari 5(但不是 4)中使用,只需进行一项更改,更改 100% to 100%25

javascript:s=document.getElementsByTagName('STYLE'); ex=document.getElementsByTagName('LINK'); d=window.open().document; /*set base href*/d.open();d.close(); b=d.body; function trim(s){return s.replace(/^\s*\n/, '').replace(/\s*$/, ''); }; function iff(a,b,c){return b?a+b+c:'';}function add(h){b.appendChild(h);} function makeTag(t){return d.createElement(t);} function makeText(tag,text){t=makeTag(tag);t.appendChild(d.createTextNode(text)); return t;} add(makeText('style', 'iframe{width:100%25;height:18em;border:1px solid;')); add(makeText('h3', d.title='Style sheets in ' + location.href)); for(i=0; i%3Cs.length; ++i) { add(makeText('h4','Inline style sheet'  + iff(' title="',s[i].title,'"'))); add(makeText('pre', trim(s[i].innerHTML))); } for (i=0; i%3Cex.length; ++i) { rs=ex[i].rel.split(' '); for(j=0;j%3Crs.length;++j) if (rs[j].toLowerCase()=='stylesheet') { add(makeText('h4','link rel="' + ex[i].rel + '" href="' + ex[i].href + '"' + iff(' title="',ex[i].title,'"'))); iframe=makeTag('iframe'); iframe.src=ex[i].href; add(iframe); break; } } void 0

在 Safari 5 中失败但在 4 中有效的书签:

javascript:s=document.getElementsByTagName('STYLE'); ex=document.getElementsByTagName('LINK'); d=window.open().document; /*set base href*/d.open();d.close(); b=d.body; function trim(s){return s.replace(/^\s*\n/, '').replace(/\s*$/, ''); }; function iff(a,b,c){return b?a+b+c:'';}function add(h){b.appendChild(h);} function makeTag(t){return d.createElement(t);} function makeText(tag,text){t=makeTag(tag);t.appendChild(d.createTextNode(text)); return t;} add(makeText('style', 'iframe{width:100%;height:18em;border:1px solid;')); add(makeText('h3', d.title='Style sheets in ' + location.href)); for(i=0; i%3Cs.length; ++i) { add(makeText('h4','Inline style sheet'  + iff(' title="',s[i].title,'"'))); add(makeText('pre', trim(s[i].innerHTML))); } for (i=0; i%3Cex.length; ++i) { rs=ex[i].rel.split(' '); for(j=0;j%3Crs.length;++j) if (rs[j].toLowerCase()=='stylesheet') { add(makeText('h4','link rel="' + ex[i].rel + '" href="' + ex[i].href + '"' + iff(' title="',ex[i].title,'"'))); iframe=makeTag('iframe'); iframe.src=ex[i].href; add(iframe); break; } } void 0

适用于新窗口的书签:

javascript:var MTl=document.getElementsByTagName('script');for(var MTi=0,MTr,MTa=[];MTl[MTi];MTi++){if(MTr=MTl[MTi].getAttribute('src')){MTa[MTa.length]=MTl[MTi];}}if(!MTa.length){alert('This page does not use any external scripts');}else if(MTa.length==1){void(window.open(MTa[0].getAttribute('src')));}else{var MTw=window.open('');MTw.document.open();MTw.document.write('<html><head><title>External scripts for '+document.title+'<\/title><\/head><body><h1>External scripts for '+document.title+'<\/h1><p>');for(MTi=0;MTa[MTi];MTi++){MTw.document.write('<a href=\''+MTa[MTi].getAttribute('src')+'\'>'+(MTa[MTi].id?MTa[MTi].id:MTa[MTi].getAttribute('src').replace(/\/$/,'').replace(/^.*\//,''))+'<\/a><br>');}MTw.document.write('<\/p><\/body><\/html>');MTw.document.close();}

【问题讨论】:

  • 这可能会更好地实现为 Safari 扩展 - 是的,Stack Overflow 可能是您提出问题的更好地方。
  • 我认为 Safari 5 不喜欢小书签尝试打开一个窗口。
  • 我还有其他书签——上面添加的一个——在 Safari 5 中打开一个新窗口。

标签: javascript safari bookmarklet safari-extension


【解决方案1】:

我从我的一个小书签中看到了同样的错误。事实证明,它一直是不正确的 URL 编码,而 Safari 5.1 必须比以前的版本更严格。看起来你有同样的问题。用 '%25' 替换文字 '%' 字符,看看你是否有更好的运气。 (例如,将“width:100%;”更改为“width:100%25;”。)

太糟糕了,有这样一个神秘的错误消息。

【讨论】:

  • 谢谢!就是这样,将 % 的一个实例更改为 %25。我自己永远也想不通。
  • 一直在寻找这个问题的答案。谢谢!
猜你喜欢
  • 2012-04-18
  • 1970-01-01
  • 2011-02-23
  • 2013-11-18
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多