2016-04-25 181 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