【问题标题】:How can I show an alert only if the user visits a specific website in my app?只有当用户访问我的应用程序中的特定网站时,我才能显示警报?
【发布时间】:2021-08-18 12:01:34
【问题描述】:

如果用户访问https://google.comhttps://duckduckgo.comhttps://bing.comhttps://yandex.ru,我如何向用户显示提醒,但在他们访问任何其他网站时不显示任何内容?

我试过这个,但没有成功。 (这只是我代码的一部分)

var isSearchEngine="NO"

if urlString!.contains("https://google.com") {
        var isSearchEngine="YES"
    } else {
        var isSearchEngine="NO"
    }
    
    if urlString!.contains("https://duckduckgo.com") {
        var isSearchEngine="YES"
    } else {
        var isSearchEngine="NO"
    }
    
    if urlString!.contains("https://yandex.ru") {
        var isSearchEngine="YES"
    } else {
        var isSearchEngine="NO"
    }
    
    if urlString!.contains("https://bing.com") {
        var isSearchEngine="YES"
    } else {
        var isSearchEngine="NO"
    }
    
    if isHub=="YES" {
        Debug.log("Visited search engine website.")
        let alert = UIAlertController(title: "Search Engine Detected", message: "The website you visited is a search engine.", preferredStyle: .alert)

        alert.addAction(UIAlertAction(title: "OK", style: .cancel, handler: nil))

        self.present(alert, animated: true)
    } else {
        Debug.log("Didn't visit a Search engine website.")
        let alert = UIAlertController(title: "No search engine", message: "The website you visited isn't a search engine.", preferredStyle: .alert)

        alert.addAction(UIAlertAction(title: "OK", style: .cancel, handler: nil))

        self.present(alert, animated: true)
    }

每次使用此代码运行我的应用时,无论我访问哪个网站,我总是会收到“无搜索引擎”警报。始终“没有搜索引擎”。谁能帮我?非常感谢!

【问题讨论】:

  • 你在哪里实现了这段代码?您是否在应用中使用网络视图?
  • 提示:webView(_:decidePolicyFor:decisionHandler:)
  • @Paulw11 这是在 ViewController.swift 中。是的,我的应用程序是一个浏览器,我刚刚开始尝试使用警报。另外,我在问题中添加了更多信息。

标签: ios swift wkwebview


【解决方案1】:

您的代码写的没有意义。它一个接一个地执行一系列 if/else 表达式。例如,如果 URL 包含“https://google.com”,则第一个 if/else 语句会将 isSearchEngine 设置为 true,然后下一个 if/else 语句会将其设置回 false。

重写它。这样的事情会起作用:

var isSearchEngine = false

if let notNilURLString = urlString {
    let searchEngineURLs = [
       "https://google.com", 
       "https://yandex.ru", 
       "https://duckduckgo.com"] // And so on
    for searchEngineURL in searchEngineURLs {
        if notNilURLString.contains(searchEngineURL)
           isSearchEngine = true
        }
    }
}

第二个问题:当您检测到搜索引擎的 URL 时尝试设置 isSearchEngine = true 后,您的其余代码继续检查字符串是否为 isHub=="YES",完全忽略了 isSearchEngine 的值.

第三点:对真/假使用Bool类型,而不是包含“YES”和“NO”的字符串。

【讨论】:

  • 另外,在 if 语句中设置 var isSearchEngine="YES" 实际上并没有修改现有变量。
  • @JamesP 哎呀。在编辑它之前,我应该更仔细地查看 OPs 代码。谢谢你抓住那个。我修好了它。 (我还把isSearchEngine 换成了Bool
  • 第二个问题:哦,对不起,我不小心从我打开的另一个项目中合并了 isHub ?。我是 Swift 的绝对初学者,所以我正在学习。此外,当我使用您的代码时,我收到一条错误消息“无法在范围内找到 urlString”。这是否意味着我一开始没有给它一个价值? urlString 设置为用户在输入时访问的网站,然后按 Return。因此,当网站加载时,urlString 被传递给 WKWebView 以加载其内容(用户指定的 URL)。
  • 更新:我已经设法通过将代码移动到文件中的其他位置来摆脱这种情况。现在没有编译器错误,但我只在访问任何网站后看到 No Search Engine 警报。这是我所做的:codeshare.io/OdKZ60 感谢一路上的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多