2011-11-11 26 views
5

Tôi đang sử dụng Firefox Addon SDK để tạo thứ gì đó giám sát và hiển thị lưu lượng truy cập HTTP trong trình duyệt. Tương tự như HTTPFox hoặc Live HTTP Headers. Tôi quan tâm đến việc xác định tab nào trong trình duyệt (nếu có) đã tạo yêu cầuXác định tab đã thực hiện yêu cầu trong Firefox Addon SDK

Sử dụng observer-service Tôi đang theo dõi các sự kiện "http-on-checking-phản hồi". Tôi có mã như sau để xác định nsIDomWindow đã tạo yêu cầu:


const observer = require("observer-service"), 
    {Ci} = require("chrome"); 

function getTabFromChannel(channel) { 
    try { 
     var noteCB= channel.notificationCallbacks ? channel.notificationCallbacks : channel.loadGroup.notificationCallbacks; 

     if (!noteCB) { return null; } 

     var domWin = noteCB.getInterface(Ci.nsIDOMWindow); 
     return domWin.top; 
    } catch (e) { 
     dump(e + "\n"); 
     return null; 
    } 
} 

function logHTTPTraffic(sub, data) { 
    sub.QueryInterface(Ci.nsIHttpChannel); 
    var ab = getTabFromChannel(sub); 
    console.log(tab); 
} 

observer.add("http-on-examine-response", logHTTPTraffic); 

Chủ yếu là giường cũi từ documentation for how to identify the browser that generated the request. Một số cũng được lấy từ phần bổ trợ Firefox Google PageSpeed.

Có cách nào được khuyến nghị hoặc được ưu tiên để đi từ đối tượng nsIDOMWindowdomWin đến yếu tố tab trong mô-đun SDK tabs?

Tôi đã xem xét điều gì đó đột phá như quét danh sách các tab cho một URL có URL khớp với domWin, nhưng sau đó tôi phải lo lắng về nhiều tab có cùng URL.

Trả lời

3

Bạn phải tiếp tục sử dụng các gói nội bộ. Từ những gì tôi có thể biết, hàm getTabForWindow() trong gói api-utils/lib/tabs/tab.js thực hiện chính xác những gì bạn muốn. đang chưa được kiểm tra:

var tabsLib = require("sdk/tabs/tab.js"); 
return tabsLib.getTabForWindow(domWin.top); 
+0

Tuyệt vời hoạt động tuyệt vời! Đoán tôi cần phải theo dõi nguồn và tài liệu. – Rob

0

Tính đến Addon SDK phiên bản 1,13 thay đổi:

var tabsLib = require("tabs/tab.js");

để

var tabsLib = require("sdk/tabs/helpers.js");

3

API đã thay đổi kể từ này được yêu cầu ban đầu/trả lời .. . Bây giờ, bây giờ (1.15) là:

return require("sdk/tabs/utils").getTabForWindow(domWin.top); 
+3

Bây giờ nó gọi getTabForContentWindow – Suhan

0

Nếu ai vẫn còn quan tâm về vấn đề này:

Mặc dù Addon SDK đã được tán thành trong sự ủng hộ của WebExtensions API mới hơn, tôi muốn chỉ ra rằng

var a_tab = require ("sdk/tab /utils").getTabForContentWindow(window)

trả về một 'tab' đối tượng khác với một bạn thường sẽ nhận được bằng cách sử dụng

worker.tab trong một PageMod.

Ví dụ: a_tab sẽ không có thuộc tính 'id', nhưng sẽ có thuộc tính linkedPanel tương tự như thuộc tính 'id'.

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