2014-12-02 11 views
0

Я хотел бы задать определенный вопрос.получить значение элемента по xpath в google chrome addon (javascript)

Я пытаюсь реализовать приложение с расширением Google Chrome, которое получает xpath из другого расширения Chrome. затем находит значение элемента и делает некоторые вещи с ним.

У меня есть слушатель в chrome addon, который получает JSON с xpath элементов html, на которые указали пользователи с помощью курсора. Например /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 во время выполнения, и если я проверю элементы в Chrome на xpaths, это также выглядит нормально.

ответ

1

Неверный document. Взгляните на Architecture Overview.

Ваш фоновый сценарий живет на специальной, невидимой странице, а document ссылается на эту страницу.

Для доступа к DOM текущей вкладке вам необходимо ввести content script и выполнить там свой код.

+0

спасибо :) решил .. –

Смежные вопросы