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