Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何使用Safari应用程序扩展重定向搜索引擎_Ios_Swift_Safari_Safari Extension_Safari App Extension - Fatal编程技术网

Ios 如何使用Safari应用程序扩展重定向搜索引擎

Ios 如何使用Safari应用程序扩展重定向搜索引擎,ios,swift,safari,safari-extension,safari-app-extension,Ios,Swift,Safari,Safari Extension,Safari App Extension,我正在尝试实现一个safari应用程序扩展,其中safari地址bad中的每一个搜索都会被重定向到另一个搜索引擎(在此示例中,是DuckDuckGo)。我已经设法做到了这一点。但是,使用此逻辑,如果用户打开并在其搜索栏中搜索,则逻辑也会尝试重定向这些搜索。我如何阻止这种情况发生 //My SafariExtensionHandler file has the following functions: //Given a Google, Yahoo, or Bing URL, this funct

我正在尝试实现一个safari应用程序扩展,其中safari地址bad中的每一个搜索都会被重定向到另一个搜索引擎(在此示例中,是DuckDuckGo)。我已经设法做到了这一点。但是,使用此逻辑,如果用户打开并在其搜索栏中搜索,则逻辑也会尝试重定向这些搜索。我如何阻止这种情况发生

//My SafariExtensionHandler file has the following functions:
//Given a Google, Yahoo, or Bing URL, this function will return the url encoding
func getQueryStringParameter(url: String) -> String? {
var param = "q"
if url.contains("search.yahoo.com") {
        param = "p"
    }
guard let url = URLComponents(string: url) else { return nil }
let rawString = url.queryItems?.first(where: { $0.name == param })?.value
let percentEncoding = rawString?.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)?.replacingOccurrences(of: "&", with: "%26")
return percentEncoding
}


// Before every page navigaion, this code checks if it's navigating to a search engine site. If so, it parses the url in order to instead navigate to that same seach term on DuckDuckGo.

override func page(_ page: SFSafariPage, willNavigateTo url: URL?) {
let hostnames = ["www.google.com", "www.bing.com", "search.yahoo.com"]
let url = url!
if hostnames.contains(url.host!) {
if let query = self.getQueryStringParameter(url: url.absoluteString) {
let redirectedURL = URL(string: "https://duckduckgo.com/?q=\(query)&ia=web")!
            page.getContainingTab { (tab) in
                tab.navigate(to: redirectedURL)
            }
        }
    }
}

您知道Safari的iOS设置中“搜索引擎”下提供了此功能吗?还有“DuckDuckGo”也被列入了名单!对但DuckDuckGo只是一个例子。我问的是一般性问题。比如说,如果我想把它改成Ecosia呢。事实上,Ecosia在他们实现它的地方有一个扩展。你知道吗,Safari的iOS设置在“搜索引擎”下提供了这个功能?还有“DuckDuckGo”也被列入了名单!对但DuckDuckGo只是一个例子。我问的是一般性问题。比如说,如果我想把它改成Ecosia呢。事实上,Ecosia在他们实施的地方有一个扩展。