2014-12-02 588 views
0

我想問一些具體的問題。在谷歌Chrome插件中通過xpath獲取元素值(javascript)

我正在嘗試使用谷歌瀏覽器擴展程序實現一個應用程序,該應用程序從另一個Chrome擴展程序獲取xpath。然後找到元素的價值,並用它做一些事情。

我在Chrome插件中有一個偵聽器,它接收用戶用光標指向的html元素的xpath的JSON。例如/HTML/BODY/DIV[@id='viewport']/DIV[@id='main']/DIV[@id='cnt']/DIV[6]/DIV[@id='rcnt']/DIV[3]/DIV[@id='center_col']/DIV[@id='res']/DIV[@id='search']/DIV[1]/DIV[@id='ires']/OL[@id='rso']/DIV[2]/LI[2]/DIV[1]/DIV[1]/DIV[1]/SPAN[1]

我想獲取該元素的值。所以,如果:

<html> 
<body> 
<div>Hello<\div> 
<body> 

,我有xpath = /html[1]/body[1]/div[1]這個元素

我想獲得字符串 「Hello」

我知道有一個函數在JavaScript中檢索元素:

var xPathResult = document.evaluate(xPath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);

但我幾乎總是檢索null。 所有的代碼在這裏:

chrome.runtime.onConnectExternal.addListener(function (port) { 
    port.onMessage.addListener(function (msg) { 
     var index; 

     if (msg != null) { 
      // console.log("Received message: " + msg); 
      var objJSON = JSON.parse(msg); 

      for (index = 0; index < objJSON.length; ++index) { 
       var xpath = objJSON[index].xpath; 
       var url = objJSON[index].url; 

       if (xpath != "Not looking at browser") { 

         var xp = getElementByXPath(xpath); //returns null all the time 
         var value = xp.innerHTML; 
       } 
      } 
     } 

    }); 
}); 

var getElementByXPath = function (xPath) { 
    var xPathResult = document.evaluate(xPath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null); 
    return xPathResult.singleNodeValue; 
}; 

你能幫忙嗎?在xpaths中沒有錯誤 - 在運行時沒有錯誤的xpath拋出異常,如果我通過xpaths檢查Chrome中的元素,它也看起來沒問題。

回答

1

錯誤document。先看看Architecture Overview

您的後臺腳本存在於一個特殊的不可見頁面中,並且document引用該頁面。

要訪問當前選項卡的DOM,您需要注入一個content script並在那裏執行您的代碼。

+0

謝謝:)解決.. – 2014-12-06 18:15:35