Доступ к appView из Cordova 5.0.0

У меня возникли проблемы с доступом к appView из последней версии Cordova для Android (5.0.0).

Например, скажем, я хочу добавить Javascript-интерфейс в свое приложение. Перед этой версией я использовал эту строку кода:

 super.appView.addJavascriptInterface(new WebAppInterface(this), "jsInterface"); 

И затем WebAppInterface :

 public class WebAppInterface { ... } 

Теперь это просто не работает. Недавно Кордова что-то изменила? Я серьезно понятия не имею, что делать.

В обоих случаях (предыдущая версия и новая) моя основная деятельность имеет следующую структуру:

 public class CordovaApp extends CordovaActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.init(); loadUrl(Config.getStartUrl()); ... } 

Solutions Collecting From Web of "Доступ к appView из Cordova 5.0.0"

После нескольких дней поиска решения, я, наконец, получил приложение для работы.

Кордова изменила способ доступа к webView Android. Разработчики, использующие Cordova 5.0.0 и более новые версии, должны добавить эту строку в свою основную деятельность:

 WebView wV = (WebView)appView.getEngine().getView(); 

А потом просто вызовите wV, как обычно. Например, чтобы добавить Javascript-интерфейс:

 wV.addJavascriptInterface(new WebAppInterface(this), "jsInterface"); 

Надеюсь, этот ответ поможет другим людям, которые смущены этим новым обновлением.

Я собирался сдаться, прежде чем я нашел ваш ответ, который помог мне в решении связанной проблемы – спасибо josemmo.

Возможно, это поможет другим: после обновления до Cordova 5 / Android 4 я не смог запустить метод shouldOverrideUrlLoading-Method моего WebViewClient, поскольку настройка WebViewClient на недавно созданном WebView

 WebView webView = new WebView(this); webView.setWebViewClient(new WebViewClient()); 

В методе onCreate ничего не делал.

Таким образом, решение заключалось в том, чтобы не создавать новый WebView, а использовать литой механизм appView AND так:

 SystemWebViewEngine systemWebViewEngine = (SystemWebViewEngine) appView.getEngine(); WebViewClient myWebViewClient = new myWebViewClient(systemWebViewEngine); WebView webView = (WebView) systemWebViewEngine.getView(); webView.setWebViewClient(myWebViewClient); 

Тогда настраиваемому классу WebViewClient нужен конструктор:

 public class myWebViewClient extends SystemWebViewClient { public myWebViewClient(SystemWebViewEngine systemWebViewEngine) { super(systemWebViewEngine); } @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { ... } } 

Я как бы сомневаюсь, что так оно и должно быть сделано, но, по крайней мере, его работа.