浏览器插件的popup.html中的接口请求存在跨域问题吗?若存在跨域,他的域名是什么呢?
修改答案:如XboxYan所说,在popup直接发请求不会有跨域问题。
插件本身的地址协议是chrome-extension://
, 所以不是像ip一样的地址。
在inject.js
注入可能存在跨域,主要是安全原因,因为插件的脚本极易成为受攻击的对象。如果请求扩展中的资源,可以使用chrome.extension.getURL
接口直接获取。获取非插件内部的资源,需要主机权限,manifest.json
中配置permission
和host_permissions
字段可获取跨域请求的权限, 比如
"permission": [
"https://**/*"
],
"host_permissions": ["https://**/*"]
虽然可解决跨域,但是始终都无法避免请求的安全问题,包括最新的网络规范中有一个叫Private Network Access(私有网络请求)的机制,当你的插件运行在客户的浏览器上时,你无法保证客户的网络环境是私有的还是公有的,所以即使解决了跨域,网络安全机制可能也绕不过去。
要保证尽可能地在任何网页中成功发送请求,请在background.js
中进行。
不存在。插件的可用域名要在 manifest.json 里配置。
另外,它当然有域名,chrome-extension://${extension-id}/
。
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
popup
中不存在跨域,进一步来说,只有注入到页面的js
才会有跨域(content-script
),这是页面本身决定的