2008-08-12 12 views
41

myślę, że powodem nie mogę zrobić, to dlatego, że to może być ogromna dziura bezpieczeństwa, ale tu idzie ...Dodaj zakładkę, która jest tylko javascript, a nie URL

chcę mieć zakładkę w mojej przeglądarce (najlepiej FF3), która jest tylko fragmentem kodu javascript. Po prostu zbuduje URL na podstawie bieżącej daty, a następnie zrobi window.location = na tym adresie URL.

Wiem, że mógłbym utworzyć stronę i zachować ją na mojej lokalnej maszynie i po prostu odnieść się do niej w ten sposób, ale zastanawiałem się, czy można ominąć ten krok i rzeczywiście "zlokalizować" zakładkę po prostu być javascript. Mógłbym przysiąc, że było to możliwe wiele lat temu, ale nie mogę znaleźć niczego, co by mi teraz opowiadało.

Odpowiedz

54

To czego potrzebujesz to bookmarklet są łatwe do utworzenia i powinny działać w większości dużych przeglądarek.

Edit: przepełnienie stosu nie wydaje się, aby umożliwić tworzenie bookmarkletów w kontekście miejsca, w zasadzie można utworzyć nową zakładkę i wpisz następujące polecenie w polu lokalizacji

javascript:window.location='http://www.google.com/search?q='+Date()

dostać bookmarkletu wyszukiwania Google dla bieżącej daty.

8

Cóż, ja po prostu stworzył zakładkę w FF3, wrócił i aktualizowane go i dodaje następujący test:

javascript:alert('Wacky%20test%20yo'); 

niskie i oto, po I zapisywane i odczytywane, udało mi się dostać mój alert.

Jestem pewien, że możesz opracować coś podobnego do swoich potrzeb.

11

Jeden drobny połów. IE może obsłużyć tylko adres URL znaków w tym formacie pod adresem . Jeśli zapiszesz go w IE z URL-em dłuższym niż to, będzie on przycinany bez ostrzeżenia i tym samym zawiedzie.

Jeśli potrzebujesz naprawdę złożonego skryptu, musisz użyć "hostowanej" skryptozakładki, w której masz krótką zakładkę, która wstrzykuje tag skryptu na stronę, aby "zadzwonić" do hostowanej skryptozakładki.

To nie jest tak ładne/przenośne, ale jest jedynym rozwiązaniem.

+5

Więc wzór na to jest coś jak: javascript: (function() { document.body.appendChild (document.createElement ('script')) .src = 'http: //www.yoursite.com/js/bookmarklet.js';})(); – Shermozle

+0

prawidłowe. Wystarczy załadować zawartość skryptu z innej strony. – scunliffe

9

Google Bookmark

javascript:(function(){var%20a=window,b=document,c=encodeURIComponent,d=a.open("http://www.google.com/bookmarks/mark?op=edit&output=popup&bkmk="+c(b.location)+"&title="+c(b.title),"bkmk_popup","left="+((a.screenX||a.screenLeft)+10)+",top="+((a.screenY||a.screenTop)+10)+",height=420px,width=550px,resizable=1,alwaysRaised=1");a.setTimeout(function(){d.focus()},300)})(); 
19

Jest godne uwagi, że można umieścić, że również w opakowaniu funkcyjnego. imranamajeed ładnie zilustrował to dla nas ... ale najwyraźniej jestem za nowy na stronę, żeby podnieść jego post. : P

tak dla jasności:

javascript:(function(){ 
    location.href = location.href + "#"; 
})(); 

(powraca Karetka nie wpływa na działanie w Chrome i IE)

+0

Tak, zawijanie go w funkcję zapobiega zwracaniu wartości zwracanej z bieżącym oknem. – mb21

Powiązane problemy