代码之家  ›  专栏  ›  技术社区  ›  AK87

从Chrome扩展获取Chrome标签pid

  •  4
  • AK87  · 技术社区  · 8 年前

    我正在尝试通过chrome扩展获取与当前选项卡关联的进程id。

    我确实设法通过了 chrome.processes 实验API。

    有没有办法用标准(非实验性)API获得选项卡pid?

    2 回复  |  直到 8 年前
        1
  •  8
  •   Rob W Sudarshan    8 年前

    如果您想获得真实的进程ID(即其他程序可以使用的ID来识别进程),那么您唯一的选择是 chrome.processes ,但此API仅在 Dev channel (因此不适用于Chrome稳定版或Beta版)。

    如果您只需要一个标识符来唯一地标识进程,那么您可以通过 chrome.webNavigation 应用程序编程接口。此ID仅在Chrome中有意义。在深入研究细节之前,让我们先假设多个选项卡可以共享相同的进程ID,并且一个选项卡可以包含多个进程(当 Site isolation project 启用)。

    因此,通过“选项卡PID”,我假设您指的是承载顶层框架的进程。然后,可以检索帧列表并提取选项卡的进程ID,如下所示:

    背景.js

    'use strict';
    chrome.browserAction.onClicked.addListener(function(tab) {
        chrome.webNavigation.getAllFrames({
            tabId: tab.id,
        }, function(details) {
            if (chrome.runtime.lastError) {
                alert('Error: ' + chrome.runtime.lastError.message);
                return;
            }
            for (var i = 0; i < details.length; ++i) {
                var frame = details[i];
                // The top-level frame has frame ID 0.
                if (frame.frameId === 0) {
                    alert('Tab info:\n' +
                          'PID: ' + frame.processId + '\n' +
                          'URL: ' + frame.url);
                    return; // There is only one frame with ID 0.
                }
            }
            alert('The top-level frame was not found!');
        });
    });
    

    宣言.json

    {
        "name": "Show tab PID",
        "version": "1",
        "manifest_version": 2,
        "background": {
            "scripts": ["background.js"],
            "persistent": false
        },
        "browser_action": {
            "default_title": "Show tab PID"
        },
        "permissions": [
            "webNavigation"
        ]
    }
    
        2
  •  4
  •   Haibara Ai    8 年前

    不,除了实验API,没有其他方法 chrome.processes