我提前为这个基本问题道歉。
我的网页A上有一个指向网页B的链接。我需要找到网页B的链接(很简单),然后将网页B中的HTML存储在我的javascript脚本中的变量中。
要从网页A存储HTML,我知道这很简单:
html_A = document.body.innerHTML;
如何从网页B存储HTML?我相信我需要使用AJAX正确吗?或者我可以用javascript做到吗?如果它是前者,那么让我们假设网页B的服务器允许它。
提前谢谢!
答案 0 :(得分:3)
如果您尝试从位于其他服务器上的网站加载HTML,则会出现Cross-Origin Request Blocked
错误。我在过去处理过这个问题并找到了一种使用YQL的方法。试试吧:
//This code is located on Website A
$(document).ready(function() {
var websiteB_url = 'http://www.somewebsite.com/page.html';
var yql = '//query.yahooapis.com/v1/public/yql?q=' + encodeURIComponent('select * from html where url="' + websiteB_url + '"') + '&format=xml&callback=?';
$.getJSON(yql, function(data) {
function filterDataCUSTOM(data) {
data = data.replace(/<?\/body[^>]*>/g, '');// no body tags
data = data.replace(/[\r|\n]+/g, ''); // no linebreaks
return data;
}
if (data.results[0]) {
var res = filterDataCUSTOM(data.results[0]);
$("div#results").html(res);
} else {
console.log("Error: Could not load the page.");
}
});
});
答案 1 :(得分:2)
仅当网页B由于the same-origin policy security feature of all major browsers而位于同一域时才可以。
如果两个页面 在同一个域上,则可以
$.get("/uri/to/webpage/b").then(function(html) {
//do something with the html;
});
请注意,只有ajax请求在.then(...)
函数内完成后,html才可用。在此代码块之后,行 NOT 将可用。
在不了解您的情况的情况下很难分辨,但这很难做到。您可能希望查看$.fn.load()
(受SOP限制)或使用iframes(不受SOP限制),因为其中一个可能更合适。
我应该注意,当您需要从另一个域访问html时,执行此操作的标准方法是将其下载到您的网络服务器上,然后从那里重新提供服务。话虽如此,这可能违反了该网站的使用条款。