2011-11-21 17 views
31

Wystąpiłam w dziwnej sytuacji. Piszę bookmarklet JavaScript, który pozwoli użytkownikom szybko i łatwo klikać i udostępniać zewnętrzne strony internetowe na naszej stronie. Po prostu dostaje tytuł, adres URL strony i jeśli wybrał dowolny tekst na stronie, to też go łapie.Jak usunąć "http: //" z adresu URL w kodzie JavaScript

Problemem jest to, że nie działa z domen zewnętrznych, z jakiegoś powodu, więc jeśli używamy go wewnętrznie skończymy z oknem zakładowego z URL sformatowany tak:

http://internaldomain.com/sharetool.php?shareid=http://internaldomain.com/anotheroddpage.html&title= ....

to działa dobrze, ale jeśli staramy się wykorzystywać domenę zewnętrzną i skończyć z URL sformatowane tak:

http://internaldomain.com/sharetool.php?shareid=http://externaldomain.com/coolpagetoshare.html&title= ...

Następnie otrzymujemy Zakazane Er ror na naszej stronie i nie można go załadować ... Jeśli ręcznie usuniemy http:// z adresu externaldomain, ładowanie znowu się poprawi.

Myślę, że najlepszym sposobem na obejście tego problemu jest zmodyfikowanie bookmarkletu JavaScript w celu usunięcia http podczas ładowania okna. Oto jak wygląda mój obecny bookmarklet:

javascript:var d=document,w=window,e=w.getSelection,k=d.getSelection,x=d.selection,s=(e?e():(k)?k():(x?x.createRange().text:0)),f='http://internaldomain.com/sharetool.php',l=d.location,e=encodeURIComponent,u=f+'?u='+e(l.href)+ 

Jak widać, e(l.href) jest, gdy adres URL jest przekazywane.

Jak mogę to zmienić, aby usunąć zewnętrzne domeny http://?

Odpowiedz

84

Myślę, że lepiej byłoby uwzględnić wszystkie możliwe protokoły.

result = url.replace(/(^\w+:|^)\/\//, ''); 
+0

To działało jak czar„+ e (l.href.replace (/.*?:\/\//g, "") – Peter

+7

To jest bardzo złe wyrażenie regularne. *? - oznacza dopasowanie nieuporządkowane, ale modyfikator/g wymusza wielokrotne stosowanie wyrażenia (np. wycięcie wszystkich znalezionych protokołów ?). Również wyrażenie nie ma ^, aby dopasować początek. Lepszy jeden: /^.*?:\/\// – disjunction

+6

@disjunction Nawet ignorując twoje komentarze, właśnie dlatego to wyrażenie zostało tak napisane, ponieważ TO jest wyraźnie stwierdzono w answe r. – FailedDev

32
url = url.replace(/^https?:\/\//,'') 
+1

niewielka poprawa: '/^(https: |?) \/\ // ' – hlcs

2

Myślę, że wyrażenie regularne, którego potrzebujesz, to /(?:http://)(.*)/i. Pierwszy mecz powinien to być.

6
l.href.replace(/^http:\/\//, '') 
-3

Spróbuj użyć replace funkcję

var url = url.replace("http%3A%2F%2F", ""); 
+0

Jest to nieodłączne z powodu braku użycia wyrażenia regularnego. Dzięki prostemu zastąpieniu tekstu w ten sposób, musisz połączyć kilka wywołań funkcji '.replace()', aby dopasować wszystkie potrzebne odmiany (http/https/etcetera) – gdibble

Powiązane problemy