我正在撰写Chrome扩展程序。我想向远程URL发出一个AJAX请求,将返回数据解析为HTML,然后与DOM交互,如点击链接:
/x/y/
问题是remote_url
引用的页面上的相对网址($(data)
)在创建带chrome-extension://abc/x/y/
的新DOM时会被解析为chrome扩展程序地址空间的一部分,比如{{1}}。
我怀疑这与某些跨域保护有关。有没有办法解决这个问题?
答案 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()这样的东西,但是我想看一看并给你一个明确的答案。