Safari 5 меняет использование javascript bookmarklets? - PullRequest
2 голосов
/ 06 сентября 2011

Есть ли ограничение на длину или другие изменения в том, как Safari 5 использует закладки JavaScript в качестве ссылок в закладках или на панели закладок?

Закладка ниже работает в Safari 4, но в Safari 5 появляется ошибка «Safari не может использовать Javascript для этого действия». Похоже, это не имеет ничего общего с открытием нового окна, так как второй скрипт ниже работает в 5 и открывает новое окно.

Существуют ли другие способы использования JavaScript для действий браузера, как в виде закладок или расширений Safari?

Обновление 10/07/11:

Букмарклет теперь работает в 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

Bookmarklet, который не работает в 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

Bookmarklet, который работает с новым окном:

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

1 Ответ

5 голосов
/ 05 октября 2011

Я видел ту же ошибку в одном из моих букмарклетов.Оказалось, что он все время неправильно кодировался по URL, и Safari 5.1 должен быть более строгим, чем предыдущие версии.Похоже, у вас та же проблема.Замените буквенные символы «%» на «% 25» и посмотрите, повезет ли вам больше.(Например, измените «width:100%;» на «width:100%25;».)

Жаль, что есть такое загадочное сообщение об ошибке.

...