解析跨源AJAX调用中的相对URL?

时间:2016-10-09 18:36:58

标签: javascript jquery google-chrome-extension cross-domain

我正在撰写Chrome扩展程序。我想向远程URL发出一个AJAX请求,将返回数据解析为HTML,然后与DOM交互,如点击链接:

/x/y/

问题是remote_url引用的页面上的相对网址($(data))在创建带chrome-extension://abc/x/y/的新DOM时会被解析为chrome扩展程序地址空间的一部分,比如{{1}}。

我怀疑这与某些跨域保护有关。有没有办法解决这个问题?

2 个答案:

答案 0 :(得分:1)

使用HTML5 URL类解析相对链接:

$data = $(data);
$data.find('[href]').each(function() {
    var href = this.getAttribute('href'); # 'this' is a DOM element
    if (href.indexOf('://') < 0) {
        this.href = new URL(href, remote_url);
    }
});

或者使用带有DOMParser元素的HTML5 base来解析所有相关链接,而不仅仅是href

  • data包含没有html / body的片段:

    var $doc = $(new DOMParser().parseFromString('<html><head><base href="' +
        remote_url + '"></head><body>' + data + '</body></html>', 'text/html'));
    
  • data包含整个页面:

    var $doc = $(new DOMParser().parseFromString(data, 'text/html'));
    $('head', $doc).append('<base href="' + remote_url + '">');
    

$doc.find('some element').click();

答案 1 :(得分:0)

如果您将该URL作为字符串接收,我将使用一些常规的旧Javascript解析它并删除您不想要的部分。如果您需要更多帮助,只需发布​​您正在接收的完整字符串以及您需要的字符串,我可以查看一下。你可能最终会使用.split()。pop()。join()这样的东西,但是我想看一看并给你一个明确的答案。