如何从外部网页引用HTML

时间:2015-02-11 18:35:13

标签: javascript jquery html ajax

我提前为这个基本问题道歉。

我的网页A上有一个指向网页B的链接。我需要找到网页B的链接(很简单),然后将网页B中的HTML存储在我的javascript脚本中的变量中。

要从网页A存储HTML,我知道这很简单:

html_A = document.body.innerHTML;

如何从网页B存储HTML?我相信我需要使用AJAX正确吗?或者我可以用javascript做到吗?如果它是前者,那么让我们假设网页B的服务器允许它。

提前谢谢!

2 个答案:

答案 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时,执行此操作的标准方法是将其下载到您的网络服务器上,然后从那里重新提供服务。话虽如此,这可能违反了该网站的使用条款。