浏览器插件的popup.html中的接口请求存在跨域问题吗?

浏览器插件的popup.html中的接口请求存在跨域问题吗?若存在跨域,他的域名是什么呢?

阅读 3.5k
3 个回答

popup中不存在跨域,进一步来说,只有注入到页面的js才会有跨域(content-script),这是页面本身决定的

image.png

修改答案:如XboxYan所说,在popup直接发请求不会有跨域问题。
插件本身的地址协议是chrome-extension://, 所以不是像ip一样的地址。

inject.js注入可能存在跨域,主要是安全原因,因为插件的脚本极易成为受攻击的对象。如果请求扩展中的资源,可以使用chrome.extension.getURL接口直接获取。获取非插件内部的资源,需要主机权限,manifest.json中配置permissionhost_permissions字段可获取跨域请求的权限, 比如

"permission": [
    "https://**/*"
],
"host_permissions": ["https://**/*"]

虽然可解决跨域,但是始终都无法避免请求的安全问题,包括最新的网络规范中有一个叫Private Network Access(私有网络请求)的机制,当你的插件运行在客户的浏览器上时,你无法保证客户的网络环境是私有的还是公有的,所以即使解决了跨域,网络安全机制可能也绕不过去。

要保证尽可能地在任何网页中成功发送请求,请在background.js中进行。

不存在。插件的可用域名要在 manifest.json 里配置。

另外,它当然有域名,chrome-extension://${extension-id}/

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题