开发者工具提供的一些高级功能可以通过chrome.debugger
API 访问(将debugger
权限添加到清单文件)。
可以使用以下Network.setUserAgentOverride
命令更改用户代理:
// Assume: tabId is the ID of the tab whose UA you want to change
// It can be obtained via several APIs, including but not limited to
// chrome.tabs, chrome.pageAction, chrome.browserAction, ...
// 1. Attach the debugger
var protocolVersion = '1.0';
chrome.debugger.attach({
tabId: tabId
}, protocolVersion, function() {
if (chrome.runtime.lastError) {
console.log(chrome.runtime.lastError.message);
return;
}
// 2. Debugger attached, now prepare for modifying the UA
chrome.debugger.sendCommand({
tabId: tabId
}, "Network.enable", {}, function(response) {
// Possible response: response.id / response.error
// 3. Change the User Agent string!
chrome.debugger.sendCommand({
tabId: tabId
}, "Network.setUserAgentOverride", {
userAgent: 'Whatever you want'
}, function(response) {
// Possible response: response.id / response.error
// 4. Now detach the debugger (this restores the UA string).
chrome.debugger.detach({tabId: tabId});
});
});
});
支持的协议和命令的官方文档可以在这里找到。在撰写本文时,没有关于更改设备指标的文档。但是,在深入研究 Chromium 的源代码后,我发现了一个文件,其中定义了所有当前已知的命令:
当我查看定义列表时,我发现Page.setDeviceMetricsOverride
. 这个短语似乎符合我们的预期,所以让我们进一步搜索,了解如何使用它:
这会产生“chromium/src/out/Release/obj/gen/devtools/DevTools.js”(数千行)。某处,有一条线定义(美化):
InspectorBackend.registerCommand("Page.setDeviceMetricsOverride", [{
"name": "width",
"type": "number",
"optional": false
}, {
"name": "height",
"type": "number",
"optional": false
}, {
"name": "fontScaleFactor",
"type": "number",
"optional": false
}, {
"name": "fitWindow",
"type": "boolean",
"optional": false
}], []);
怎么读这个?好吧,发挥你的想象力:
chrome.debugger.sendCommand({
tabId: tabId
}, "Page.setDeviceMetricsOverride",{
width: 1000,
height: 1000,
fontScaleFactor: 1,
fitWindow: false
}, function(response) {
// ...
});
我已经使用协议版本 1.0 在 Chrome 25 中对此进行了测试,它可以工作:正在调试的选项卡已调整大小。耶!