是否可以在给定网址的情况下使用HTML
下载整个JavaScript
网页?我想要做的是开发一个Firefox附加组件来下载浏览器当前页面源中找到的所有链接的内容。
更新:网址位于同一个域
答案 0 :(得分:5)
应该可以使用jQuery ajax。 Firefox扩展中的Javascript不受跨源限制的约束。以下是在Firefox扩展中使用jQuery的一些提示:
将jQuery库添加到您的扩展程序的chrome / content /目录。
在窗口加载事件回调中加载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));
使用“jQuery”而不是“$”。当使用$而不是jQuery时我经历了奇怪的行为(我认为是某种冲突)
使用jQuery(content.document)代替jQuery(document)来访问页面的DOM。在Firefox扩展中,“document”指的是浏览器的XUL,而“content.document”指的是页面的DOM。
我写了一个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)
如果您只想用自己的想法编写文本网页下载器,并且只知道html
和javascript
,则可以使用html
编写下载名称“download.hta”并且javascript
来控制Msxml2.ServerXMLHTTP.6.0
和FSO