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

SwiftUI中如何通过默认搜索引擎在Safari打开非URL字符串(如搜索内容)

在SwiftUI中直接调用默认搜索引擎发起搜索

当然有办法解决这个问题!你完全不用手动拼接搜索引擎的URL——iOS和macOS都提供了原生的方式,直接调用系统默认搜索引擎发起搜索,不管你要搜的是samplestring还是8883notaurl这类非URL字符串,都能轻松搞定。

推荐实现方式:使用NSUserActivity(符合系统规范)

这种方式是Apple官方推荐的,它会自动适配用户设置的默认搜索引擎,不需要你关心具体是Google、Bing还是其他引擎。

iOS/SwiftUI 代码实现

首先定义一个处理搜索的工具函数:

import SwiftUI
import UIKit

func openSystemSearch(for query: String) {
    // 创建搜索类型的用户活动
    let searchActivity = NSUserActivity(activityType: NSUserActivityTypeSearch)
    // 设置搜索查询内容
    searchActivity.userInfo = [NSUserActivityQueryStringKey: query]
    
    // 让系统处理这个活动,自动打开默认搜索引擎
    UIApplication.shared.resignFirstResponder()
    if let searchURL = searchActivity.webpageURL {
        UIApplication.shared.open(searchURL, options: [:], completionHandler: nil)
    }
}

然后在你的SwiftUI视图中调用这个函数:

struct SearchDemoView: View {
    var body: some View {
        VStack(spacing: 24) {
            Button("搜索 samplestring") {
                openSystemSearch(for: "samplestring")
            }
            Button("搜索 8883notaurl") {
                openSystemSearch(for: "8883notaurl")
            }
        }
        .padding()
    }
}

更直接的方式:使用x-web-search URL Scheme

如果你想要更简洁的代码,也可以直接使用系统提供的x-web-search:// scheme,同样能触发默认搜索引擎:

func openSearchDirectly(for query: String) {
    // 对查询字符串进行URL编码,避免特殊字符问题
    guard let encodedQuery = query.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed),
          let searchURL = URL(string: "x-web-search://?query=\(encodedQuery)") else {
        return
    }
    UIApplication.shared.open(searchURL, options: [:], completionHandler: nil)
}

macOS 适配

如果是macOS平台,实现逻辑类似,只是把UIApplication换成NSWorkspace:

import AppKit

func openMacSystemSearch(for query: String) {
    let searchActivity = NSUserActivity(activityType: NSUserActivityTypeSearch)
    searchActivity.userInfo = [NSUserActivityQueryStringKey: query]
    
    if let searchURL = searchActivity.webpageURL {
        NSWorkspace.shared.open(searchURL)
    }
}

为什么这两种方式更好?

  • 无需手动拼接不同搜索引擎的URL格式,系统自动适配用户的默认选择
  • 符合Apple的人机交互指南,行为更贴近系统原生体验
  • 自动处理查询字符串的编码问题,避免特殊字符导致的错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 17:47:28