Greasemonkey: xmlHttpRequest.open 不再接受没有协议和主机的路径

创建于 2017-12-14  ·  9评论  ·  资料来源: greasemonkey/greasemonkey

我在 jesus2099/konami-command#372 中注意到 Firefox v57 + Greasemonkey v4 只适用于完整的 URL https?://host.tld/pathname而不再只适用于/pathname
Firefox v57 + 另一个 GM 引擎不受此回归影响,这就是我在这里开票的原因。

所有9条评论

在我的解决方法中,我不得不在我的 URL 前面附加self.location.protocol + "//" + self.location.host +

从内容脚本上下文(运行用户脚本)运行请求必须使用完整的 url。

https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Chrome_incompatibility#Content_script_requests_happen_in_the_context_of_extension_not_content_page

如果您不想使用完整的 url,那么您可以使用window.wrappedJSObject并使用exportFunction()导出运行所需的任何函数(onreadystatechange 等)。 我的建议是使用完整的网址。

非常感谢您的帮助。
好的,所以您的意思是它符合 WebExtensions 系统的规范,对吗?
我不知道这个 WebExtensions 的东西,但它似乎是一个标准......?
我不记得在GM v4 中为作者的博客文章阅读过有关此特定回归的任何内容。
确定这种回归是永久性的吗?

确定这种回归是永久性的吗?

也许。 我真的不知道。 如果可以创建适当的沙箱,那么<strong i="7">@grant</strong> none可能不会有这些问题。 但是如果需要一些特权 API,那么这些步骤可能是必要的。 球真的在 Mozilla 的球场上。

FTR 我的脚本是<strong i="5">@grant</strong> none脚本。
我让项目负责人关闭或不关闭此票证。
我会适应的。

这不是故意的,因此不应期望它是永久性的。 我们可以完全解析基于文档作为根的非绝对路径。

请注意,正确的基本网址是: document.baseURI (与<base href="...">

我可以确认,jQuery AJAX 仅适用于路径 URL。
Firefox 57,最新的 Greasemonkey。

$.ajax({
  url: '/some/path',
  success: () => {}
});

我的 AJAX 适用于旧版 Firefox(WebExtensions 之前)

上述修复已打包在新的测试版中:
https://addons.mozilla.org/firefox/downloads/file/830369/greasemonkey-4.2beta1-an+fx.xpi?src=devhub

测试和确认将不胜感激!

此页面是否有帮助?
0 / 5 - 0 等级