La compréhension de webview Android javascript interface
J'ai créé un android WebView
, et injecté javascript
interface à l'aide de addJavascriptInterface(mObject, "jsinterface")
. Il fonctionne très bien jusqu'à ce que je créer un objet avec le même nom (jsinterface) en JavaScript à l'aide de la new
opérateur.
Mon Code Java:
WebView mWebView = findViewById(R.id.myWebView);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.setWebChromeClient(new MyWebChromeClient((Activity)mContext));
mWebView.addJavascriptInterface(new testClass(), "jsinterface");
mWebView.loadUrl("UrlToLoad");
testClass.java
public class testClass{
public testClass() {
}
@JavascriptInterface
public String testNativeMethod() {
return "Java method called!!";
}
}
Mon Code Java Script
test.js
function test(msg){
this.message = msg;
this.testJSMethod = function(){
return this.message;
}
}
alert(jsinterface.testNativeMethod()); //prints Java method called!!
jsinterface= new test("JS method called...");
alert(jsinterface.testJSMethod()); //prints JS method called...
alert(jsinterface.testNativeMethod()); //errors "NPMethod called on non- NPObject"
Problème:
Est-ce possible pour un javascript
objet pour avoir accès à la fois , j'.e javascript
méthodes et natif JAVA
méthodes(exposés via javascriptinterface
) ? Est-il possible de fixer un bien webview
OU de l'exécution de toute JS script
pour obtenir ce fait?
OriginalL'auteur Umair Anwar | 2016-04-26
Vous devez vous connecter pour publier un commentaire.
ESSAYER
Vous pouvez essayer de faire un autre objet, qui va retraduire les appels javascript interface.Mettre en œuvre
onPageStarted
méthode dansWebViewClient
, et injecter du code javascript dansonPageStarted
de la méthode, de la manière suivante.Espère que cela aide 🙂
OriginalL'auteur Aown Raza
Penser
document
en javascript. Lorsque vous êtes dans un navigateur web, c'est un objet global que vous avez accès à tout moment. Si vous faites votre proprenew
var appelédocument
, vous allez avoir des problèmes d'accès à l'globaldocument
.Lorsque vous exécutez cette ligne:
vous ajoutez un objet global appelé
jsinterface
. C'est la même situation quedocument
. Si vous créez une variable avec le même nom, il va remplacer l'existant référence à l'échelle mondiale.Une fois que vous ajoutez une interface javascript pour la
WebView
, vous n'avez pas besoin de créer unnew
référence à l'interface.addJavascriptInterface
l'a déjà fait pour vous.OriginalL'auteur kris larson