解析跨域AJAX调用中的相对url
Parse relative URLs in cross-origin AJAX call?
我正在写一个Chrome扩展。我想向远程URL发出AJAX请求,将返回数据解析为HTML,然后与DOM交互,如单击链接:
$.ajax({
url: remote_url,
success: function(data) {
$(data).find('some element').click()
}
})
问题是,相对url (/x/y/
)在由remote_url
提到的页面被解析为chrome扩展的地址空间的一部分,当创建一个新的DOM与$(data)
,如chrome-extension://abc/x/y/
。
我怀疑这与某些跨域保护有关。有什么办法可以绕过这个吗?
使用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);
}
});
或使用HTML5 DOMParser与基本元素来解析所有的相对链接,而不仅仅是在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();
如果你收到URL作为字符串,我会用一些常规的旧Javascript解析它,并删除你不想要的部分。如果你想要更多的帮助,只需发布完整的字符串你收到和你需要的字符串,我可以看看。您可能最终会使用.split().pop().join()之类的东西,但我想看看并给您一个明确的答案。
相关文章:
- 为什么html src属性中的相对url是因为Javascript函数中的完整路径
- 如何在从剃刀视图移动内联JavaScript时保留相对URL
- Backbone.js&Handlebars.js来创建相对URL
- JSF元素在外部上下文中加载了相对url
- 正则表达式,用于匹配字符串开头的协议相对 URL
- 使用来自 iframe 的相对 url 跨域导航 parent.window
- 无法获取相对 URL 在 OpenLayers3 中的工作
- 带有Javascript/Jquery的POSTS的相对URL - 简洁
- 图像中的 wysiHTML5 相对 URL
- 替换 Facebook Feed 中的相对 URL
- 是否可以将相对 URL 提供给 Phantom.js页面生成器以获取 PDF 渲染
- 使用本机输入类型=“date” 的 jQuery UI 的协议相对 URL 方法
- 具有相对url的window.location
- 使用JavaScript为MVC应用程序构建相对URL
- 在文档根服务器上的任何CSS、JS、HTML、PHP和TPL文件上,将http替换为相对url//
- 从绝对url获取相对url
- 如何使用http代理中间件重定向/代理来自browsersync的相对url
- JSP/JavaScript web应用程序中的绝对URL与相对URL
- 在jQuery代码中,您将相对url放在哪里
- openDialog()中是否可以使用相对URL/路径