2016-04-25 512 views
3

我试图通过Chrome扩展插件获取与当前标签关联的进程ID。从Chrome扩展中获取Chrome标签页pid

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

有什么办法可以通过标准(非实验性)API获取标签页pid?

回答

5

如果你想获得真正的进程ID(即一个可以被其他程序用来识别过程),那么你唯一的选择是chrome.processes,但此API仅适用于Dev channel(对于Chrome稳定版和Beta版不适用)。

如果您只需要一个标识符来唯一标识进程,那么您可以通过chrome.webNavigation API获取“标签的进程ID”。此ID仅在Chrome中有意义。在深入研究细节之前,我们首先说多个选项卡可以共享相同的进程ID,并且一个选项卡可以包含多个进程(启用Site isolation project时)。

所以,通过“选项卡PID”,我假定您指的是托管顶级框架的进程。然后你可以检索帧列表和提取的过程中ID为标签如下:

background.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!'); 
    }); 
}); 

的manifest.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" 
    ] 
} 
+0

谢谢,但我需要的操作系统在铬外使用的PID。 – AK87