如何使用javascript下载整个网页的HTML?

时间:2012-01-02 13:30:53

标签: javascript html url download firefox-addon

是否可以在给定网址的情况下使用HTML下载整个JavaScript网页?我想要做的是开发一个Firefox附加组件来下载浏览器当前页面源中找到的所有链接的内容。

更新:网址位于同一个域

4 个答案:

答案 0 :(得分:5)

应该可以使用jQuery ajax。 Firefox扩展中的Javascript不受跨源限制的约束。以下是在Firefox扩展中使用jQuery的一些提示:

  1. 将jQuery库添加到您的扩展程序的chrome / content /目录。

  2. 在窗口加载事件回调中加载jQuery,而不是将其包含在浏览器覆盖XUL中。否则会导致冲突(例如,用户的自定义工具栏)。

    (function(loader){ 
    loader.loadSubScript("chrome://ryebox/content/jquery-1.6.2.min.js"); })
    (Components.classes["@mozilla.org/moz/jssubscript-loader;1"].getService(Components.interfaces.mozIJSSubScriptLoader));
    
  3. 使用“jQuery”而不是“$”。当使用$而不是jQuery时我经历了奇怪的行为(我认为是某种冲突)

  4. 使用jQuery(content.document)代替jQuery(document)来访问页面的DOM。在Firefox扩展中,“document”指的是浏览器的XUL,而“content.document”指的是页面的DOM。

  5. 我写了一个Firefox扩展程序,用于从朋友的书签网站获取书签。它使用jQuery从他的服务中获取JSON响应中的书签,然后创建这些书签的菜单,以便我可以轻松访问它们。您可以在https://github.com/erturne/ryebox

    浏览来源

答案 1 :(得分:1)

对于一般的JavaScript,简短的回答是否定的,除非所有页面都在同一个域中。 JavaScript受same-origin policy限制,因此出于安全原因,您无法执行此类跨域请求。

然而,正如Max和erturne在评论中指出的那样,当JavaScript作为浏览器的扩展/附加组件的一部分编写时,关于相同原始策略和跨域请求的常规规则似乎不适用 - 至少不适用于Firefox和Chrome。因此,使用XML来下载页面应该可以使用XMLHttpRequest,或使用您喜欢的JS库中包含的一些包装器方法。

如果您喜欢我喜欢jQuery,您可以查看jQuery的.load()方法,该方法从给定资源加载HTML,并将其注入您指定的元素。

修改 根据关于附加组件提出的跨域请求的评论,对我的答案进行了一些更新。

答案 2 :(得分:1)

如果组合scheme:// domain:port与托管应该抓取HTML的JavaScript的页面相同,则可以执行XmlHttpRequests(XHR`s)。

许多JS框架为您提供了简单的XHR支持,Jquery,Dojo等。使用DOJO的示例:

function getText() {
  dojo.xhrGet({
    url: "test/someHtml.html",
        load: function(response, ioArgs){
      //The repsone is the HTML
      return response;
    },
    error: function(response, ioArgs){
      return response;
    },
    handleAs: "text"
  });
}

如果您更喜欢编写自己的XMLHttpRequest处理程序,请查看此处:http://www.w3schools.com/xml/xml_http.asp

答案 3 :(得分:-1)

如果您只想用自己的想法编写文本网页下载器,并且只知道htmljavascript,则可以使用html编写下载名称“download.hta”并且javascript来控制Msxml2.ServerXMLHTTP.6.0FSO