0

我正在製作一個將JavaScript注入某個論壇網站的chrome擴展。當您在論壇上查看個人資料時,JavaScript會使用jQuery爲網頁添加一個按鈕。每個個人資料頁面上都有一個鏈接,可以顯示論壇上所有個人資料的帖子。 jQuery添加的按鈕(通過Chrome擴展)應該使用每個配置文件頁面上的「顯示最後發佈」鏈接來查看配置文件的所有最新帖子,並查找實際上是新主題的帖子,而不僅僅是回覆其他帖子論壇上的主題。 Chrome擴展程序的目的是顯示配置文件的最後一個主題。獲取網頁數據到只能跑出網頁的JavaScript

問題是,我用來刮取網頁的Node.js代碼無法在網頁上下文中運行。我認爲它不起作用,因爲它使用節點模塊的'請求'和'cheerio',它們沒有瀏覽器支持。

現在我只能通過在代碼中手動插入指向'show last posts'頁面的鏈接來運行Node.js刮板,然後在本地命令提示符下執行它。有兩個問題這一切:

  1. 如何使Node.js的刮刀執行運行了網頁的背景當有人點擊年代由Chrome擴展添加的按鈕?

  2. 如何從chrome擴展的內容腳本(jQuery按鈕)發送'show last posts'鏈接到刮板? (上述刮板不能在瀏覽器中運行搶鏈接本身)

請提供你的答案前的號碼,這樣每個人都可以告訴你在回答哪些問題。謝謝

+0

有一件事我不明白在這裏。爲什麼你甚至需要用服務器端的應用程序颳去網頁?你在擴展內部不能做什麼,爲什麼? – Xan 2014-09-29 18:21:32

+0

我剛剛開始編寫我的第一種語言(JavaScript)上週,所以我不知道完成此任務的其他方式。刮刮碰巧是我看到的第一種方法,當我第一次開始學習時,我不知道它在Chrome擴展中不起作用。 – Farad 2014-09-29 19:12:17

+0

你應該看看[XHRs](https://developer.chrome.com/extensions/xhr)來完成你的擴展需要。另見[MDN](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest)。 – Xan 2014-09-29 19:14:17

回答

0
  1. 首先,您需要在擴展程序可訪問的服務器上運行節點刮除器。

    您可以舉辦像Heroku服務後,您需要將服務器的URL添加到服務器Manifest文件permissions

    "permissions": [ "tabs", 
        "*://link-to-your-herokuapp.herokuapp.com/*" 
    ], 
    
  2. 將數據發送到服務器,你可以使用一個URL說/getLastPost並添加請求參數/getLastPost?parameter=value&parameter2=value2。在你的情況下,你需要發送鏈接(如果我沒有弄錯),你可以做些什麼,如getLastPost?link=someLinkHere。然後在你的Node.js刮添加URL控制器如下:

    var url = require('url'); 
    app.get('/getLastPost', function(req, res){ 
        var url_parts = url.parse(req.url, true); 
        var link = url_parts.query; //this would give you your link 
        functionThatPerformsScraping(link); //send the link as a parameter to the function where you require the link 
    }); 
    

我希望這是不夠好,讓你開始。

編輯:

這裏查找阿賈克斯:http://api.jquery.com/jquery.ajax/。所以這就是將按鈕點擊完成

$('.some-btn-class').on('click', function(
    $.ajax({ 
     url:'link-to-herokuapp.herokuapp.com/getLastPost?link='+val, 
    }).done(function(){ 
     //whatever needs to be performed once ajax is done 
    }); 
)}); 

看起來你似乎是新來jquery和Node.js。瀏覽不同的文件。

+0

太棒了。我很困惑put/getLastPost和請求參數。這將在jQuery按鈕的代碼?我也不知道如何在代碼中編寫它,語法上。 – Farad 2014-09-29 16:39:57

+0

你是如何使用Node.js刮刀的?此外,沒有不在Jquery butto代碼中。它進入Node.js服務器。 url調用需要通過ajax進行。 – Newtt 2014-09-29 17:06:46

+0

我使用的node.js刮刀獲取一個URL並在URL的HTML中搜索某個元素。然後它將該元素的一部分添加到數組中以便稍後顯示給用戶。我還沒有想出實際顯示數組的方法。好吧,*這是*按鈕腳本中的內容:getLastPost/link = someLinkHere?當按鈕被按下時,肯定有東西要發送鏈接。 – Farad 2014-09-29 17:23:28