Intereting Posts
React Native 'hello world' быстрый старт: "не удалось подключиться к серверу разработки" Как обновить SimpleAdapter в Android Перекрыть MapView Tile Source? Почему мой TableLayout не разрешается накачивать? Изменение значка и цвета заголовка при выборе в библиотеке дизайна Android TabLayout InterruptedException при отладке приложения для Android Не удалось включить аппаратные кнопки AVD Как сохранить базу данных sqlite непосредственно на SD-карте Как создать свою собственную библиотеку для разработки Android, которая будет использоваться в каждой написанной вами программе? Как установить тег на маркер карты Google в Android? Обновления смарт-приложений в Google Play Store: как это работает? Андроидная сетка вид места элементы справа налево LocalBroadcastManager vs Context.registerReceiver (), Context.sendBroadcast (Intent) и Context.unregisterReceiver () – они такие же? Как напрямую читать / записывать файлы с устройства и на устройство (например, эффект O_DIRECT-флага) на Java-пути? Как отключить логарифм переноса текста в Eclipse Juno

Android WebView игнорирует target = "_ blank" при добавлении WebViewClient

У меня возникла странная проблема.

В моем приложении мне нужно загрузить статический html-файл на основе щелчка по кнопке в папке «Ресурсы» WebView.

Теперь среди 5 html-файлов один html-файл содержит 15 статических ссылок. Эти ссылки должны перенаправить пользователя на указанный URL в мобильном браузере. Я использовал target="_blank" для этой цели, как указано в моем html-файле.

 <div class="lid"><a href="https://www.irctc.co.in/" target="_blank">Railway Reservation </a></div> 

Теперь это отлично работает в примере приложения с простым WebView без добавления WebViewClient .

Но для других моих функций мне нужен WebViewClient . Таким образом, в то время target="_blank" полностью игнорируется. И URL-адрес открывается в WebView.

Я нашел обходное решение, что я могу использовать shouldOverrideUrlLoading следующим образом:

 myWebView.setWebViewClient(new WebViewClient(){ public boolean shouldOverrideUrlLoading(WebView view, String url) { // TODO Auto-generated method stub if(url.equalsIgnoreCase("https://www.irctc.co.in/")) { view.getContext().startActivity( new Intent(Intent.ACTION_VIEW, Uri.parse(url))); return true; } else return super.shouldOverrideUrlLoading(view, url); } }); 

Таким образом, это открытие этого URL-адреса в браузере по умолчанию.

Поэтому в основном мои вопросы:

Почему target="_blank" игнорируется при использовании WebViewClient ? И есть ли другой способ обхода проблемы? Потому что у меня есть 15 ссылок, которые мне нужно будет сравнить. Я не могу загрузить все URL-адреса в новом браузере, так как есть несколько ссылок, которые нужно открыть в том же WebView.

Solutions Collecting From Web of "Android WebView игнорирует target = "_ blank" при добавлении WebViewClient"

У меня есть идея обходного пути. Замените все ссылки, которые должны были быть открыты в новом окне с помощью специальной схемы. Тогда вы можете справиться с этим сами.

Для минимального прерывания задайте также настраиваемую тему и выполните все изменения конфигурации:

 <activity android:name="com.example.LinkHandler" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" android:theme="@android:style/Theme.Translucent"> <intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> <data android:scheme="your.link.handler.schema"/> </intent-filter> </activity> Размер <activity android:name="com.example.LinkHandler" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" android:theme="@android:style/Theme.Translucent"> <intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> <data android:scheme="your.link.handler.schema"/> </intent-filter> </activity> 

Затем в вашем обработчике ссылок вы можете прочитать URL-адрес с помощью getIntent().getData() .

Пожалуйста, имейте в виду, что вы должны обрабатывать http и https, я пропустил это в моем коротком примере выше.

Вот пример JavaScript, как переписать URL:

 for(var i=0; i<document.links.length; i++) { if(document.links[i].target == "_blank") { document.links[i].href = "your.schema.for."+document.links[i].href; } } 
 <ul> <li><a href="http://example.com">Test 1</a></li> <li><a href="http://example.net" target="_blank">Test 2</a></li> <li><a href="https://example.com" target="_blank">Test 3</a></li> <li><a href="https://example.net">Test 4</a></li> </ul>