2013-03-26 3 views
1

я пытаюсь построить RSS Сборщик Extension с помощью этого учебника -Ошибка - не удается вызвать метод «SendRequest» неопределенный

http://www.lifehacker.com.au/2011/11/how-to-build-a-chrome-extension

Но я думаю, это немного старое и Google уже внесены некоторые изменения , Расширение для загрузки там вообще не работает. Я решил много ошибок, чтобы сделать его работу, но им stucked в этом:

Uncaught TypeError: Cannot call method 'sendRequest' of undefined

Это мой popup.html файл, где ошибка.

function fetch_feed() { 
chrome.extension.sendRequest({'action' : 'fetch_feed', 'url' : 'http://spfc.terra.com.br/rss/news.xml'}, 
    function(response) { 
     display_stories(response); 
     } 
    ); 
} 

function display_stories(feed_data) { 
    var xml_doc = $.parseXML(feed_data); 
    $xml = $(xml_doc); 
    var items = $xml.find("item"); 
    $('#popup').html('<img src="logo.png" id="logo" onclick="open_item(\'http://spfc.terra.com.br/\'); window.close();" /><br clear="all" />'); 
    items.each(function(index, element) { 
     var post = parse_post(element); 
     var item = ''; 
     var class2 = ''; 
     if (index >= localStorage['unread_count']) { 
      // // console.log('visited'); 
      item += '<div class="post read">'; 
     } 
     else { 
      item += '<div class="post">' 
     } 
     item += '<span class="tag">' + post.tag + '</span>\ 
        <a href="' + post.url + '">\ 
         <div id="' + post.id + '" class="item" onclick="open_item(\'' + post.url + '\');">\ 
          <img src="' + post.img + '" width="107" height="60" />\ 
          <h4>' + post.title + '</h4>\ 
          <span class="description">' + post.description + '...</span>\ 
         </div>\ 
        </a>'; 
     item += '</div>'; 
     $('#popup').append(item); 
    }); 
} 

Кстати я тоже об ошибке в background.html, в этой части:

function fetch_feed(url, callback) { 
    var xhr = new XMLHttpRequest(); 
    xhr.onreadystatechange = function(data) { 
     if (xhr.readyState == 4) { 
     if (xhr.status == 200) { 
      var data = xhr.responseText; 
      callback(data); 
     } else { 
      callback(null); 
     } 
     } 
    } 
    // Note that any URL fetched here must be matched by a permission in 
    // the manifest.json file! 
    xhr.open('GET', url, true); 
    xhr.send(); 
} 


function onRequest(request, sender, callback) { 
    if (request.action == 'fetch_feed') { 
     fetch_feed(request.url, callback); 
    } 
} 


chrome.extension.onRequest.addListener(onRequest);  

ли та же ошибка, но с другим свойством:

Uncaught TypeError: Cannot read property 'onRequest' of undefined

P.S. Я попытался найти решение здесь, прежде чем спросить и не смог. Подождите, пока не поможет его решить.

ответ

2

chrome.extension.sendRequest осуждается вы должны использовать chrome.runtime.sendMessage для передачи сообщений на фоне сценария

Вы можете увидеть полный апи по адресу: Chrome Message Passing

+0

Спасибо за ответ. Я заменил sendRequest sendMessage и onRequest на onMessage (в background.html), и я получаю ту же ошибку: ** Uncaught TypeError: Не удается вызвать метод 'sendMessage' неопределенного ** –

+0

@ThiagoDosReis Извините, я написал функцию с ошибкой должен быть 'chrome.runtime' вместо chrome.extension для' sendMessage' и 'onMessage' – frisco

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