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:
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://
?
To działało jak czar„+ e (l.href.replace (/.*?:\/\//g, "") – Peter
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
@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