2010-06-26 44 views
7

Tôi đang tìm cách xác định công cụ mở của tab cụ thể (tab chính) trong tiện ích Google Chrome.Có thể xác định công cụ mở của một tab trong tiện ích Google Chrome không?

Tôi đã xem tài liệu cho Tab nhưng dường như không có bất kỳ thứ gì có thể mang lại thông tin này. http://code.google.com/chrome/extensions/tabs.html

Tôi đã thử tiêm kịch bản nội dung này vào các trang (nghĩ rằng mình có thể vượt qua giá trị trang nền của tôi):

alert(window.opener); 

.. nhưng nó chỉ mang lại null.

Điều tốt nhất tôi cần làm là theo dõi tab hiện đang được tập trung và bất kỳ khi nào tab mới được tạo, chỉ cần giả sử tab được chọn là nút mở/cha/mẹ của tab mới. Tôi tin rằng điều này sẽ de facto xác định tab chính xác phần lớn thời gian vì các tab nền hiếm khi (được phép) mở các trang mới. Tuy nhiên, có vẻ như kludgey và có khả năng không chính xác ở các thời điểm - ví dụ: nếu một tiện ích mở rộng khác mở một tab mới, phương pháp này có thể xác định sai trình mở của tab mới.

+0

Tôi có thể hỏi bạn đang/bạn xây dựng loại tiện ích mở rộng nào không? Tôi đang tìm một cái rất đơn giản mà sẽ có chức năng chính xác này rất đơn giản: Bất cứ khi nào tôi nghi ngờ 'tôi đến từ đâu' hoặc cái gì đã mở, tôi muốn biết phụ huynh của tab hiện tại. Phần mở rộng của bạn có thể bằng bất kỳ cơ hội nào trả lời câu hỏi đó cho tôi không? Hoặc thậm chí nếu không, có lẽ bạn biết về một phần mở rộng tương tự? – Wizek

Trả lời

2

Chrome đã thêm API tiện ích thử nghiệm có thể thực hiện điều này - cụ thể là webNavigation.onBeforeRetarget. http://code.google.com/chrome/extensions/experimental.webNavigation.html

Tuy nhiên, vì đây vẫn là thử nghiệm (không thể sử dụng được trong các phiên bản ổn định của Chrome hoặc có thể tải xuống trên Cửa hàng Chrome trực tuyến), tôi đã sử dụng một cách tiếp cận khác.

Về cơ bản:

Trong content_script.js:

chrome.extension.sendRequest({ 
    request: { 
     op: "pageLoadStarted", 
     url: document.location.href, 
     referrer: document.referrer 
    } 
}); 

Trong background.html:

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) { 
    console.log('onRequest: ' + JSON.stringify(request)); 
    console.log(JSON.stringify(sender)); 
    }); 

Cách tiếp cận này cho phép tôi để có được những giới thiệu của một tab, mà tôi sau đó có thể tương quan với url của tab hiện tại. Đây không phải lúc nào cũng là một bản đồ một-một, vì vậy tôi thực hiện một số phép thuật bổ sung chẳng hạn như thích tab hiện được chọn làm trình mở nếu url của nó khớp với liên kết giới thiệu của tab mới.

Đây thực sự chỉ là một bản hack để ước tính chức năng sẽ được cung cấp đơn giản và chính xác hơn bởi webNavigation.onBeforeRetarget hoặc window.opener.

1

Tiếp tục điều tra đã tiết lộ rằng onCreatedNavigationTarget() không luôn lửa khi bạn nghĩ rằng nó sẽ chỉ ra một mối quan hệ mở mở lại.

Một gợi ý bổ sung đôi khi có thể được tìm thấy trong đối tượng Tab được trả về bởi chrome.tabs.onCreated/onUpdated trong tham số .openerTabId.

Một giải pháp toàn diện có thể sẽ phải dựa vào nhiều phương pháp được mô tả trong các câu trả lời này.

1
port.onMessage.addListener(
    function(msg) { 
     var tabid = port.sender.tab.openerTabId; 
     console.log("Received message from tab that was opened by tab id : " + tabid); 
     // reliably shows the tab id of the tab that opened 
     // the tab sending the message 
    }); 
Các vấn đề liên quan