2011-11-21 29 views
31

Tôi đã gặp phải tình huống kỳ lạ. Tôi đang viết một bookmarklet JavaScript cho phép người dùng nhấp và chia sẻ các trang web bên ngoài vào trang web của chúng tôi rất dễ dàng và nhanh chóng. Nó chỉ đơn giản là lấy tiêu đề, URL trang và nếu họ đã chọn bất kỳ văn bản nào trên trang, nó cũng sẽ lấy nó.Cách xóa 'http: //' khỏi URL trong JavaScript

Vấn đề là nó không hoạt động với lĩnh vực bên ngoài đối với một số lý do, vì vậy nếu chúng ta sử dụng nó trong nội bộ chúng tôi kết thúc với một cửa sổ chia sẻ với URL được định dạng như thế này:

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

Đó chỉ hoạt động tốt, nhưng nếu chúng ta cố gắng sử dụng một miền bên ngoài và kết thúc với một URL được định dạng như thế này:

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

Sau đó chúng ta có được một Forbidden Er ror trên trang của chúng tôi và không thể tải nó ... Nếu chúng tôi tự xóa http:// khỏi địa chỉ externaldomain, nó sẽ tải lại một lần nữa.

Vì vậy, tôi nghĩ giải pháp tốt nhất để giải quyết vấn đề này là sửa đổi bookmarklet JavaScript để xóa http vì nó đang tải cửa sổ. Sau đây là cách bookmarklet hiện tại của tôi trông:

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)+ 

Như bạn thấy, e(l.href) là nơi mà các URL được thông qua.

Làm cách nào tôi có thể sửa đổi để xóa miền bên ngoài http://?

Trả lời

84

Tôi nghĩ sẽ tốt hơn nếu tính đến tất cả các giao thức có thể có.

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

đó đã làm việc như một say mê '+ e (l.href.replace (/.*?:\/\//g, "") – Peter

+7

Đây là một regex rất nghèo. *? - có nghĩa là không phù hợp, nhưng/g modifier buộc biểu thức được áp dụng nhiều lần (tức là cắt tất cả các giao thức tìm thấy Ngoài ra biểu thức không có^để phù hợp với sự bắt đầu tốt hơn một: /^.*?:\/\// – disjunction

+6

@ disjunction Ngay cả bỏ qua ý kiến ​​của bạn, đó là chính xác lý do tại sao regex này được viết như thế này, vì điều này rõ ràng đã nêu trong phần trả lời r. – FailedDev

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

cải tiến nhỏ: '/^(https: |?) \/\ //' – hlcs

2

Tôi nghĩ cụm từ thông dụng bạn cần là /(?:http://)(.*)/i. Trận đấu đầu tiên của điều này nên là nó.

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

Hãy thử sử dụng chức năng replace

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

Điều này là unideal cho việc thiếu sử dụng Regular Expression. Với việc thay thế văn bản đơn giản như thế này, bạn sẽ cần chuỗi các hàm '.replace()' để chứa tất cả các biến thể khác nhau cần thiết (http/https/etcetera ..) – gdibble

Các vấn đề liên quan