Intereting Posts
Выбирайте только прямых потомков из таблицы с материализованным путем Android webview поймать плохой URL Жизненный цикл базы данных Sqlite? Он удаляется, когда приложение закрыто? Android Studio Не удалось вызвать IncrementalTask.taskAction () для задачи ': project: dexDebug' Как запустить музыкальный плеер cordova в фоновом режиме с вариантами, доступными на панели уведомлений Как получить температуру батареи с десятичной? Android: как постоянно и полностью НЕ показывать по умолчанию мягкую клавиатуру для EditText? Платформа Android: как реализовать пользовательский интерфейс, подобный колоде карт? Конфигурация удаленной конфигурации Firebase от пользователяId Плавающая кнопка действия Прокрутите странное поведение Как указать вид в макете? Графические вертикальные метки GraphView в integer от 0 Как добраться до события редактирования в календаре через программный код? Как получить ширину и высоту экрана Приложение Android TV

Методы WebView не вызываются в android

Мой веб-просмотр не вызывает функцию javascript, она возвращает предупреждение, как показано ниже. Кто-нибудь может предложить, как избавиться от приведенного ниже предупреждения.

07-30 10:15:44.031: W/webview_proxy(3770): java.lang.Throwable: Warning: A WebView method was called on thread 'WebViewCoreThread'. All WebView methods must be called on the UI thread. Future versions of WebView may not support use on other threads.

Ниже моя функция.

 public boolean onLongClick(View v){ System.out.println("dfdsf"); // Tell the javascript to handle this if not in selection mode //if(!this.isInSelectionMode()){ this.getSettings().setJavaScriptEnabled(true); this.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); this.getSettings().setPluginsEnabled(true); this.loadUrl("javascript:android.selection.longTouch();"); mScrolling = true; //this.setJavaScriptEnabled(true); //} // Don't let the webview handle it return true; } 

Предупреждение сообщает вам все. Вы напрямую вызываете методы webview. Это означает, что вы вызываете их в WebViewCoreThread. Вы должны называть их в потоке пользовательского интерфейса, что означает в Activity, который использует этот веб-просмотр.

Подобно:

 WebView wv = (WebView)findViewById(id); wv.setJavaScriptEnabled(true); wv.setJavaScriptCanOpenWindowsAutomatically(true); wv.setPluginsEnabled(true); wv.loadUrl("javascript:android.selection.longTouch();"); 

Как предупреждает, вы вызываете методы webview в WebViewCoreThread . Таким образом, измените свой код так,

 public boolean onLongClick(View v){ YourActivity.this.runOnUiThread(new Runnable() { public void run() { this.getSettings().setJavaScriptEnabled(true); this.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); this.getSettings().setPluginsEnabled(true); this.loadUrl("javascript:android.selection.longTouch();"); mScrolling = true; } }); } 

Используйте этот код Я думаю, он будет работать на вас, и изменил его в соответствии с вашими требованиями ##

  private WebView webView; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.web); webView = (WebView) findViewById(R.id.web_view); webView.setInitialScale(1); webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setLoadWithOverviewMode(true); webView.getSettings().setUseWideViewPort(true); webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); webView.setScrollbarFadingEnabled(false); webView.loadUrl("http://www.youtube.com"); } } 

OnLongClick является участником веб-просмотра?

Кажется, вы не можете вызвать все методы WebView в потоке «WebViewCoreThread».

Вы можете использовать обработчик, отправить сообщение msg в обработчик onLongClick, а затем вызвать методы WebView в вашем обработчике.

Я думаю, что вы должны выполнить свой код метода onLongClick в runOnUIThread () или с помощью Handler, это предупреждение должно использовать все это в рабочем потоке.

Вы можете использовать WebView через Runnable. Нет необходимости использовать активность.

  webView.post(new Runnable() { @Override public void run() { getSettings().setJavaScriptEnabled(true); getSettings().setJavaScriptCanOpenWindowsAutomatically(true); getSettings().setPluginsEnabled(true); loadUrl("javascript:android.selection.longTouch();"); mScrolling = true; } });