【问题标题】:Give Document proper URL or location为文档提供正确的 URL 或位置
【发布时间】:2014-12-11 21:59:48
【问题描述】:

我使用 Ajax 下载 HTML 代码,然后解析它:

var req = new XMLHttpRequest();
//Request for the current URL (such as http://example.org or http://stackoverflow.com/questions/27433215/give-document-proper-url-or-location)
req.open("GET", window.location.href);
req.onload = function() {
   //Returns Document object with `about:blank` in URL
   var doc = document.implementation.createHTMLDocument();
   //Put the code from request to the Document (all relative URL's are now lost)
   doc.documentElement.innerHTML = this.responseText;
   window.loadedDoc = doc;
}
req.send();

问题在于文档的 URL 是about:blank。这会导致任何相对 URL 导致错误的路径。最重要的是,从<a> 中选择href 会得到/path/ 而不是http://example.com/path/

我可以在某些时候设置正确的Document.URL 吗? url 应该与当前的window.location 相同 - 所以没有安全风险!

如果浏览器实现没有处理这种情况,是否至少可以正确替换链接 URL?

【问题讨论】:

  • 问题是,为什么位置是about:blank,你为什么要从那里做ajax请求,到什么地方,你如何避免同源策略?
  • @adeneo CORS 何时适用于 window.location.href?请检查代码。
  • 不会吧,Cross Origin Resource Sharing大概跟这个没什么关系,但是我根本没提过CORS?
  • CORS 是同源策略的子集。你指的是哪一部分?我似乎违反了它的哪一部分以及如何违反?我真的只是通过 Ajax 加载当前 URL。我需要一个具有相同 URL 的文档。
  • 你将如何执行跨域 AJAX 请求?他们是被禁止的。

标签: javascript html domdocument


【解决方案1】:

尝试嗅探about:blank 字符串,如果存在则不要使用相对路径:

var url = window.location.href;

if (url == 'about:blank')
{
    // Use absolute paths
}
else
{
    // Use relative paths, as before
}

使用String.indexOf() 可能更可靠地进行比较:

if (url.indexOf('about:blank') !== false)
{
    // Use absolute paths
}

【讨论】:

  • window.location 不是相关变量。该问题适用于我创建的文档。 window.location 代表当前页面的 URL。
  • 我相信你已经检查了它的内容。我可以问一下为什么它不相关/为什么你不能将它视为一个字符串来传递给这方面的请求?这是一个有趣的问题。
  • 因为我将 DOM 甚至 jQuery 选择器应用于文档。我正在制作一个用户脚本,可以连续预加载下一页(用于 xkcd webcomic)。所以我需要正确的链接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-24
相关资源
最近更新 更多