如何在iOS 14.x中通过代码启动Safari并调用默认搜索引擎搜索
iOS 14.x 应用内启动Safari调用默认搜索引擎的实现方案
x-web-search:// 是苹果未公开的私有URL Scheme,在iOS 14+ 版本已被禁用,因此原有方案无法生效。目前可以通过以下方案实现需求,无需硬编码各搜索引擎的地址,完全遵循用户系统设置的默认搜索引擎:
实现步骤
- 对需要搜索的关键词进行URL编码,处理空格、特殊字符等内容
- 在编码后的关键词前拼接一个问号
?,构造为完整的NSURL对象 - 调用
UIApplication的openURL:(iOS 14+ 推荐使用open:options:completionHandler:)方法打开构造的URL,系统会自动唤起Safari,Safari会识别该内容为搜索请求,自动调用用户设置的默认搜索引擎执行搜索
示例代码(Objective-C)
NSString *searchKeyword = @"你要搜索的关键词"; // 关键词URL编码 NSString *encodedKeyword = [searchKeyword stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; // 构造搜索URL NSURL *searchURL = [NSURL URLWithString:[NSString stringWithFormat:@"?%@", encodedKeyword]]; if ([[UIApplication sharedApplication] canOpenURL:searchURL]) { [[UIApplication sharedApplication] openURL:searchURL options:@{} completionHandler:nil]; }
示例代码(Swift)
let searchKeyword = "你要搜索的关键词" guard let encodedKeyword = searchKeyword.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else { return } guard let searchURL = URL(string: "?\(encodedKeyword)") else { return } if UIApplication.shared.canOpenURL(searchURL) { UIApplication.shared.open(searchURL) }
方案说明
该方案利用了Safari的默认行为:当地址栏输入的内容不是标准可访问URL时,会自动将内容提交给用户设置的默认搜索引擎执行搜索。在关键词前拼接问号可以避免当关键词本身是合法域名时,Safari直接跳转对应网站而非执行搜索的问题。
内容的提问来源于stack exchange,提问作者user5209082
相关产品推荐
相关产品推荐

