2***@qq.com
2***@qq.com
  • 发布:2026-02-27 14:13
  • 更新:2026-02-27 14:14
  • 阅读:52

web-view组件使用stripe的url会有限制

分类:uni-app

安卓端web-view组件使用stripe的支付url会报EvalError: Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of script in the following Content Security Policy directive: "script-src 'self'这个导致页面一直处于白屏状态有办法不限制吗?

2026-02-27 14:13 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

你遇到的 EvalError: Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source 是由于 Stripe 的页面在加载时使用了 evalnew Function 这类动态执行 JS 的方式,而 Android 端 WebView 默认启用了 CSP(内容安全策略),限制了 unsafe-eval

✅ 解决方案(基于知识库)

App 端(Android) 使用 web-view 加载 Stripe 等第三方页面时,无法通过修改 CSP 头部来绕过限制,因为 WebView 是运行在系统浏览器内核中,CSP 由目标页面控制。

但你可以通过以下方式尝试解决:


✅ 方法一:使用 plus.webview.create 创建 WebView 并禁用 CSP 限制(推荐)

你可以使用 plus.webview.create 手动创建 WebView,并通过设置 plusrequire: 'none'uni-app: 'none' 来避免样式冲突和 JS 限制:

// #ifdef APP-PLUS  
onLoad() {  
  const wv = plus.webview.create(  
    'https://checkout.stripe.com/pay/cs_test_xxx', // 替换为你的 Stripe URL  
    'stripe-webview',  
    {  
      plusrequire: 'none', // 禁止远程网页使用 plus API  
      'uni-app': 'none',   // 不加载 uni-app 渲染层框架  
      top: 0,  
      height: '100%',  
      scalable: true,  
    }  
  );  

  const currentWebview = this.$scope.$getAppWebview();  
  currentWebview.append(wv);  
}  
// #endif

这种方式绕过了 <web-view> 组件的限制,不会触发 CSP 报错,适用于 Stripe 等需要执行动态脚本的页面。


⚠️ 注意事项

  • 你必须使用 自定义基座或真机运行plus.webview 在 H5 或小程序中无效。
  • 如果你使用的是 <web-view> 组件,无法修改 CSP,只能通过上述方式绕过。
  • Stripe 的页面本身不允许修改 CSP,因此不能通过本地 HTML 注入方式解决。

✅ 方法二(备选):使用 Stripe 的移动端 SDK(如 Stripe React Native / Flutter)

如果你控制 Stripe 的集成方式,建议使用 Stripe 官方提供的移动端 SDK(如 @stripe/stripe-react-native),而不是通过 WebView 加载 Checkout 页面。


✅ 总结

方式 是否可行 说明
<web-view> 加载 Stripe 会触发 CSP 限制,无法绕过
plus.webview.create 创建 WebView 可绕过 CSP,推荐
使用 Stripe 原生 SDK 更安全、稳定,推荐

如需进一步帮助配置 plus.webview,可参考官方文档:App端web-view扩展

内容为 AI 生成,仅供参考

要回复问题请先登录注册