2010-09-11 7 views
14

Sử dụng API của Google Chrome tab.url value, phương pháp nào tốt nhất để chỉ nhận miền từ toàn bộ giá trị?Plugin Google Chrome: Cách nhận tên miền từ URL (tab.url)

Trong JavaScript, tôi sẽ sử dụng window.location.protocol & window.location.hostname. Ví dụ: một cái gì đó như thế này:

var domain = window.location.protocol + "//" + window.location.hostname; 

Nhưng đó là miền mở rộng chứ không phải tab nên không thể sử dụng phương pháp đó. Vì vậy, với một chức năng tương tự như một dưới đây ... Làm thế nào tôi sẽ dải chỉ là tên miền từ giá trị tab.url?

function show_alert() { 
    chrome.tabs.getSelected(null, function(tab) { 
     var currentURL = tab.url; 
     alert(currentURL); 
    }); 
} 

Trả lời

17

Trước hết, các tên miền không bao gồm giao thức. Tôi đã tạo ra một biểu thức chính quy cho vấn đề của bạn. Để có được tên máy (bạn muốn làm điều này như địa chỉ IP không phải là lĩnh vực) của một URI, sử dụng như sau:

var domain = uri.match(/^[\w-]+:\/{2,}\[?([\w\.:-]+)\]?(?::[0-9]*)?/)[1]; 
// Given uri = "http://www.google.com/", domain == "www.google.com" 

Nếu bạn muốn nguồn gốc (giao thức + máy chủ (không phải tên máy, có một chênh lệch) + cổng tùy chọn) thay vì tên miền, sử dụng the following:

var origin = uri.match(/^[\w-]+:\/{2,}\[?[\w\.:-]+\]?(?::[0-9]*)?/)[0]; 
// Given uri = "http://www.google.com/", origin == "http://www.google.com" 
+2

Chỉ cần rực rỡ. – miksiii

22

Kể từ khi câu hỏi này được trả lời ban đầu, một giải pháp tốt hơn đã xuất hiện.

Hầu hết các trình duyệt hiện đại bây giờ hỗ trợ sử dụng các URL constructor, cung cấp quyền truy cập vào href, hostname, path và tất cả các cách tiêu chuẩn tách lập một URL.

Để có được tên miền, bạn có thể làm như sau:

chrome.tabs.getSelected(null, function (tab) { 
    var url = new URL(tab.url) 
    var domain = url.hostname 
    // `domain` now has a value like 'example.com' 
}) 
+5

Đây phải là câu trả lời được chấp nhận. Chỉ cần nói không để điên regexes! :-) – Perry