You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Chrome扩展调用Flask鼠标操作接口时出现CORS跨域报错

问题根源

你看到的跨域报错是假象,不是CORS配置本身的问题:当Flask接口抛出未捕获的异常返回500错误时,Flask-CORS中间件不会给错误响应添加Access-Control-Allow-Origin头,浏览器就会拦截响应报跨域错误。
去掉move_mouse()调用时接口正常,说明跨域基础配置是生效的,问题出在move_mouse()执行时抛出了未捕获的异常,触发了500响应。


修复方案

1. 关闭Flask debug模式的热重载器

Flask开debug=True时默认会启动双进程的文件热重载器,pynput的鼠标控制实例在双进程环境下很容易出现句柄冲突、资源占用问题,直接抛运行时错误。
修改服务启动代码即可:

# 二选一即可
app.run(debug=False) # 不需要调试功能直接关debug
app.run(debug=True, use_reloader=False) # 要保留debug功能就单独关闭重载器

2. 给程序开放鼠标控制权限

全平台下控制输入设备都需要系统级权限,权限不足时pynput初始化Controller、操作鼠标的瞬间就会抛权限错误:

  • Windows:右键点击启动Flask的终端/IDE,选择「以管理员身份运行」后再启动服务
  • macOS:打开「系统设置→隐私与安全性→辅助功能」,给运行Python的终端/IDE勾选权限
  • Linux:把当前运行Python的用户加入input用户组,重启终端后再启动服务

3. 补全Chrome扩展权限配置

你manifest里配置的权限仅覆盖http://localhost/*,但JS代码里请求的地址是http://127.0.0.1:5000,两个地址虽然指向本机,但在浏览器同源校验里属于不同源,极端场景下会触发拦截。
修改manifest的权限配置:

"permissions": ["tabs", "http://localhost/*", "http://127.0.0.1/*"]

4. 增加异常捕获避免被假跨域报错误导

给接口加异常捕获,哪怕代码报错也会携带CORS头返回,你可以直接在浏览器控制台看到真实错误信息,不用再被跨域报错干扰:

@app.route('/click_coord/', methods=['POST']) 
def click_coord():
    try:
        move_mouse()
        a = 15
        b = 17
        return jsonify({"code": 0, "result": a+b})
    except Exception as e:
        # 终端会同步打印真实报错信息
        print(f"接口运行错误:{repr(e)}")
        return jsonify({"code": 500, "msg": str(e)}), 500

内容的提问来源于stack exchange,提问作者Shika

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 06:18:09