这是这个问题的后续问题,因为经过进一步调查,看起来核心问题是不同的,足以保证一个不同的问题
我试图使用一个用户脚本与TamperMonkey调用一个不相关的API。但是在twitter页面上调用外部api似乎是不可能的。
fetch('https://httpbin.org/post', {
method: 'POST',
body: JSON.stringify('{}')
})
这个,从浏览器控制台(Firefox)调用,将在几乎任何网站上工作,返回一个带有镜像数据的200代码。然而,当启动时,仍然在浏览器控制台,从twitter.com,这将不起作用,并返回202 CachedForSync没有数据。
在Chrome控制台我得到一个明确的错误:
拒绝连接'https://httpbin.org/post',因为它违反了以下内容安全策略指令:"connect-src 'self' blob:
(后面是URL列表,我假设是twitter自己的脚本调用的每个外部API)
我不知道这是相同的还是不同的错误(如果它是Chrome特定的事情,我不感兴趣,我的目标是Firefox)。
这是否意味着从twitter页面调用任何其他API是不可能的,还是有一种绕过它的方法?不同的呼叫方式?头吗?浏览器选项?什么?
= = =
感谢@sideshowbarker的编辑,我意识到CSP是问题,而不是CORS(我之前的所有障碍都是CORS,这个错误是在控制台的CORS错误中间,我没有意识到这些是分开的事情)。
第一个解决方案:禁用security.csp.enable选项。这个作品。尽管出于显而易见的原因,我宁愿避免那样做。
是否可以在网站的基础上设置,这样风险会小一些?是否有可能通过TamperMonkey函数或指令来避免它?至少我有新的关键词可以搜索了。
解决方法:不使用fetch,使用GM.xmlhttpRequest函数。它可以绕过CSP