iOS WebView(react-native-webview)自定义scheme报错NSURLErrorDomain-1002
React Native WebView iOS 唤起自定义Scheme(swish://)报NSURLErrorDomain -1002 解决方案
核心问题原因
iOS的WebView本身不会自动处理第三方APP的自定义Scheme请求,当WebView尝试加载swish://这类URL时,因无法解析会抛出unsupported URL错误,最终 fallback 到about:blank。
解决方法
1. 拦截WebView导航请求,手动唤起APP
使用React Native的LinkingAPI拦截自定义Scheme请求,阻止WebView尝试加载该URL,直接唤起对应APP:
import { Linking } from 'react-native'; import WebView from 'react-native-webview'; // 你的组件代码 <WebView source={{ uri: '你的页面地址' }} originWhiteList={['swish://*', 'https://*']} onShouldStartLoadWithRequest={(request) => { // 拦截swish开头的URL if (request.url.startsWith('swish://')) { // 唤起Swish APP Linking.openURL(request.url).catch(err => { console.error('唤起Swish失败:', err); // 可选:如果APP未安装,这里可以处理跳转下载逻辑 }); return false; // 阻止WebView加载该URL,避免报错 } return true; // 允许其他合法URL正常加载 }} />
2. 确认Info.plist配置生效
- 打开Xcode,进入项目的
Info标签页,检查LSApplicationQueriesSchemes数组中是否包含swish; - 确保配置添加到了当前运行的Target中,若有多个Target,需逐个配置;
- 配置后clean并重新编译项目,避免缓存导致配置未生效。
3. 额外检查项(若加载本地HTML)
如果WebView加载的是本地HTML文件,需添加allowUniversalAccessFromFileURLs={true}属性,确保WebView能正常处理外部Scheme请求:
<WebView // 其他属性 allowUniversalAccessFromFileURLs={true} />
为什么Safari能正常唤起?
Safari浏览器有专门的逻辑处理自定义Scheme,会自动唤起对应APP;但React Native的WebView基于WKWebView/UIWebView,没有这个自动处理逻辑,必须手动拦截处理。
内容的提问来源于stack exchange,提问作者davidjons
相关产品推荐
相关产品推荐

