Как закрыть веб-просмотр в мобильном андроиде / iOs (родное приложение) - PullRequest
0 голосов
/ 26 апреля 2018

В нашем приложении есть открытие одного URL в веб-представлении, есть способ закрыть веб-просмотр после определенного определения URL.Как можно закрыть веб-просмотр?Я попытался с window.close() в javascript.but не может работать. Есть другой способ из Android или приложения IOS.

Ответы [ 4 ]

0 голосов
/ 26 апреля 2018

В iOS вы теперь будете использовать Safari sfview, поэтому прямой подбор URL-адреса блокируется для обеспечения безопасности, поэтому единственное универсальное решение, которое вы можете применять в приложениях для Android и iOS, - это глубокие ссылки.

Вы можете вызватьзакройте представление safari sf, когда достигнете определенного URL-адреса, используя глубокую ссылку.

Глубокая ссылка Google и следуйте примерам.

0 голосов
/ 26 апреля 2018

В соответствии с комментариями к вопросу , я ставлю лучший термин для закрытия веб-просмотра - возвращаясь к предыдущему экрану .Для Android и iOS это можно сделать следующим образом:

Android:

finish()  

iOS:

Если выиспользуется контроллер навигации:

self.navigationController?.popViewController(animated: true)  

Если вы представляете контроллер веб-представления:

self.dismiss(animated: true, completion: nil)  

Ключ должен проверить этот URL в функции делегата веб-представления.

Android:

    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (url.equals("your_url")) {
            finish()
            return false;
        } else {
            return true;
        }
    }  

iOS:

func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        if request.url?.absoluteString == "your_url" {
            self.navigationController?.popViewController(animated: true)
            // If controller is presented -  self.dismiss(animated: true, completion: nil)  
            return false
        }

        return true
    }
0 голосов
/ 26 апреля 2018

Используйте это может помочь вам

  myWebView.destroy();
  myWebView = null;
0 голосов
/ 26 апреля 2018

Вы можете использовать shouldOverrideUrlLoading

Дать хост-приложению возможность взять на себя управление, когда будет загружен новый URLв текущем WebView.Если WebViewClient не указано, по умолчанию WebView попросит Activity Manager выбрать правильный обработчик для URL.Если указан WebViewClient, возвращаемое значение true означает, что приложение хоста обрабатывает URL, а возвращаемое значение false означает, что текущий WebView обрабатывает URL.

Примечания:

  • Этот метод не вызывается для запросов, использующих POST «метод».
  • Этот методтакже вызывается для подкадров со схемами, отличными от http, поэтому настоятельно рекомендуется безоговорочно вызывать loadUrl(String) с URL-адресом запроса изнутри метода, а затем возвращать значение true, поскольку это приведет к WebView для попытки загрузки URL-адреса не-httpи, следовательно, потерпеть неудачу.

Вот пример демонстрации

public class MainActivity extends AppCompatActivity {

    WebView myWebView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        myWebView = findViewById(R.id.myWebView);
        myWebView.setWebViewClient(new MyWebViewClient());
        myWebView.getSettings().setJavaScriptEnabled(true);
        myWebView.loadUrl("https://stackoverflow.com/users/7666442/nilesh-rathod?tab=topactivity");

    }


    public class MyWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if (url.equals("https://stackoverflow.com/users/7666442/nilesh-rathod?tab=profile")) {

                finish() ;
                Toast.makeText(MainActivity.this, "URL DETECTED", Toast.LENGTH_SHORT).show();
                // perform your action here
                return true;
            } else {
                view.loadUrl(url);
                return true;
            }
        }
    }


}
...