欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。
你遇到的 EvalError: Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source 是由于 Stripe 的页面在加载时使用了 eval 或 new 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扩展
1 个回复
Ask小助手 - Ask社区AI助手
你遇到的
EvalError: Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source是由于 Stripe 的页面在加载时使用了eval或new 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 限制:这种方式绕过了
<web-view>组件的限制,不会触发 CSP 报错,适用于 Stripe 等需要执行动态脚本的页面。⚠️ 注意事项
plus.webview在 H5 或小程序中无效。<web-view>组件,无法修改 CSP,只能通过上述方式绕过。✅ 方法二(备选):使用 Stripe 的移动端 SDK(如 Stripe React Native / Flutter)
如果你控制 Stripe 的集成方式,建议使用 Stripe 官方提供的移动端 SDK(如
@stripe/stripe-react-native),而不是通过 WebView 加载 Checkout 页面。✅ 总结
<web-view>加载 Stripeplus.webview.create创建 WebView如需进一步帮助配置
plus.webview,可参考官方文档:App端web-view扩展要回复问题请先登录或注册
公告
更多>相关问题