9

Tôi đang viết một phần mở rộng cần phải biết ai chịu trách nhiệm khi yêu cầu mạng được thực hiện. Initiator từ Network Panel là chính xác những gì tôi muốn. Nhưng tôi không thể lấy nó bằng cách sử dụng API devtools.network hoặc devtools.panels. Có phải vì họ chỉ đơn giản là không tiết lộ thông tin đó hoặc tôi đang thiếu một cái gì đó?Cách truy xuất Trình khởi tạo yêu cầu khi mở rộng Chrome DevTool?

Trả lời

10

Bạn chính xác trong đó người khởi xướng không được tiếp xúc thông qua API tiện ích mở rộng của devtools - hiện tại, thuộc tính tài nguyên mà API hiển thị được giới hạn trong đặc tả HAR, không bao gồm trình khởi tạo. Bạn có thể sử dụng giao thức DevTools thô (https://developers.google.com/chrome-developer-tools/docs/debugger-protocol) để nhận tất cả dữ liệu có sẵn cho giao diện người dùng DevTools. Lưu ý rằng nó cũng được mở rộng cho các phần mở rộng của Chrome (http://developer.chrome.com/extensions/debugger.html), nhưng bạn không thể sử dụng nó khi đầu cuối DevTools được mở ra, vì vậy bạn sẽ không thể truy cập nó trong phần mở rộng DevTools.

Tùy thuộc vào những gì bạn đang cố gắng thực hiện, API thời gian thử nghiệm có thể được sử dụng (thử nghiệm này cho biết cách thực hiện: https://code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/LayoutTests/inspector/extensions/extensions-events.html&q=webInspector.timeline&sq=package:chromium&type=cs&l=148). Không giống như người khởi tạo trong mạng, nó sẽ không hiển thị cho bạn vị trí trong tài liệu gây ra tài nguyên được giới thiệu tĩnh để tải, nhưng nó sẽ cung cấp cho bạn dấu vết ngăn xếp cho XHR và tài nguyên được thêm động vào tài liệu.

3

Điều này có thể đã thay đổi kể từ khi câu trả lời ban đầu nhưng để tham khảo sau này có thể thông qua các debugger extension API nghe network events

Ví dụ (trong vòng một phần mở rộng)

var tabId = parseInt(window.location.search.substring(1)); 

window.addEventListener("load", function() { 
    chrome.debugger.sendCommand({tabId:tabId}, "Network.enable"); 
    chrome.debugger.onEvent.addListener(onEvent); 
}); 

window.addEventListener("unload", function() { 
    chrome.debugger.detach({tabId:tabId}); 
}); 

var requests = {}; 

function onEvent(debuggeeId, message, params) { 
    if (tabId != debuggeeId.tabId) 
    return; 

    if (message == "Network.requestWillBeSent") { 
    console.log(params.initiator); 
    } 
} 

Mã này đã được sửa đổi từ HTTP extension example

+1

làm cách nào để bạn chạy mã này? – James

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