Как вставить параметр запроса в URL-адрес связанной страницы перед его загрузкой?

Он просто говорит, что приложение должно запускаться на веб-сервере. У меня была такая же проблема с хром, я начал tomcat и перенесла туда свое приложение, и оно сработало.

1
задан rmaddy 13 July 2018 в 15:28
поделиться

2 ответа

Сначала используйте WKWebView. Затем вы можете использовать метод WKNavigationDelegate decidePolicyForNavigationAction, чтобы проверить URL-адрес загрузки, и если у него нет требуемых параметров запроса, отрегулируйте URL-адрес и перезагрузите его:

class ViewController: UIViewController, WKNavigationDelegate  {
    var webView: WKWebView?
    var loadUrl = URL(string: "https://stackoverflow.com/tags?isFromMobile=true")!

    override func viewDidLoad() {
        super.viewDidLoad()
        // .. all your other code here

        // Load first request with initial url
        loadWebPage(url: loadUrl)
    }

    func loadWebPage(url: URL)  {
        var components = URLComponents(url: url, resolvingAgainstBaseURL: false)
    components?.query = nil

        // If already has a query then append a param
        // otherwise create a new one
        if let query = url.query {
            // If isFromMobile param already exists jsut reassign the existing query
            if query.contains("isFromMobile=true") {
                components?.query = query
            } else {
                 components?.query = query + "&isFromMobile=true"
            }
        } else {
            components?.query = "isFromMobile=true"
        }

        let customRequest = URLRequest(url: components!.url!)
        loadUrl = components!.url!
        webView!.load(customRequest)
    }

    // MARK: - WKNavigationDelegate

    func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
        guard let url = navigationAction.request.url else {
            decisionHandler(.cancel)
            return
        }

        // If url changes, cancel current request which has no custom parameters
        // and load a new request with that url with custom parameters
        if url != loadUrl {
            decisionHandler(.cancel)
            loadWebPage(url: url)
         } else {
            decisionHandler(.allow)
         }
     }
 }
1
ответ дан Au Ris 17 August 2018 в 13:18
поделиться
  • 1
    Спасибо за ваш ответ. Но мне также необходимо обеспечить поддержку для более низких версий, и вам необходимо поддерживать стек webview (пользователь также сможет вернуться назад). – Dipesh 13 July 2018 в 11:00
  • 2
    Серьезно, вам нужно поддерживать ниже, чем iOS 8? – Au Ris 13 July 2018 в 11:05
  • 3
    Я хотел бы предоставить поддержку выше версии iOS 8. – Dipesh 13 July 2018 в 11:08

Прежде всего, при поиске в документации на ящик я обнаружил несколько вещей.

Прежде всего, вы используете UIWebview, который устарел. Вы должны использовать WKWebView. Из документов :

Важно. Начиная с iOS 8.0 и OS X 10.10, используйте WKWebView для добавления веб-контента в ваше приложение. Не используйте UIWebView или WebView.

При поиске документации для WKWebView существует способ, который вы можете использовать, называемый load (_:) .

Таким образом, вы бы переопределили этот метод, изменив URL-адрес, чтобы он содержал (isFromMobile = true), а затем вызвал супер-метод с обновленным URL-адресом.

Надеюсь, это может помочь.

0
ответ дан J.Paravicini 17 August 2018 в 13:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: