2016-09-23 3 views
3

Ich versuche nur, meine Java-App mit dem Inhalt auf der Webansicht zu kommunizieren.Verwenden von Javascript Brücke in Android

Im Detail, möglicherweise nur einen Toast auf Knopf klicken?

Nach der Suche auf Google und einige Nachforschungen, endete mit dem folgenden Code.

P.S: - Ich benutze Android Studio, gibt es irgendeine externe Bibliothek, die ich kompilieren muss, um Dinge zu erledigen? oder etwas anderes ?

Nach meinem WebviewActivity-Code ist: -

public class WebviewActivity extends AppCompatActivity { 

private static final String TAG = "Main"; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_webview); 
    //WebView Object 
    WebView browser; 
    browser=(WebView)findViewById(R.id.webView); 
    //Enable Javascript 
    browser.getSettings().setJavaScriptEnabled(true); 
    //Inject WebAppInterface methods into Web page by having Interface 'Android' 
    browser.addJavascriptInterface(new WebAppInterface(this), "Android"); 
    browser.loadUrl("http://www.somewebsite.com/app/form.html"); 
} 
//Class to be injected in Web page 
public class WebAppInterface { 
    Context mContext; 

    /** Instantiate the interface and set the context */ 
    WebAppInterface(Context c) { 
     mContext = c; 
    } 

    /** 
    * Show Toast Message 
    * @param toast 
    */ 
    public void showToast(String toast) { 
     Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show(); 
    } 

    /** 
    * Show Dialog 
    * @param dialogMsg 
    */ 
    public void showDialog(String dialogMsg){ 
     AlertDialog alertDialog = new AlertDialog.Builder(mContext).create(); 

     // Setting Dialog Title 
     alertDialog.setTitle("JS triggered Dialog"); 

     // Setting Dialog Message 
     alertDialog.setMessage(dialogMsg); 

     // Setting alert dialog icon 
     //alertDialog.setIcon((status) ? R.drawable.success : R.drawable.fail); 

     // Setting OK Button 
     alertDialog.setButton("OK", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
       Toast.makeText(mContext, "Dialog dismissed!", Toast.LENGTH_SHORT).show(); 
      } 
     }); 

     // Showing Alert Message 
     alertDialog.show(); 
    } 

    /** 
    * Intent - Move to next screen 
    */ 
    public void moveToNextScreen(){ 
     AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext); 
     // Setting Dialog Title 
     alertDialog.setTitle("Alert"); 
     // Setting Dialog Message 
     alertDialog.setMessage("Are you sure you want to leave to next screen?"); 
     // Setting Positive "Yes" Button 
     alertDialog.setPositiveButton("YES", 
       new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 
         //Move to Next screen 

        } 
       }); 
     // Setting Negative "NO" Button 
     alertDialog.setNegativeButton("NO", 
       new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 
         // Cancel Dialog 
         dialog.cancel(); 
        } 
       }); 
     // Showing Alert Message 
     alertDialog.show(); 
    } 
    } 
} 

form.html: -

<html> 
<head> 
    <style> 
    body{ 
background-color: #FA5858; 
color:#fff; 
    } 
input{ 
background-color: #F7D358; 
width: 300px; 
padding:10px; 
color: #000; 
} 
div#content{ 
padding:20px; 
background-color: #F7D358; 
    color: #000; 
} 
</style> 
<script type="text/javascript"> 
    function showAndroidToast(toastmsg) { 
    Android.showToast(toastmsg); 
    } 
function showAndroidDialog(dialogmsg) { 
     Android.showDialog(dialogmsg); 
    } 
    function moveToScreenTwo() { 
    Android.moveToNextScreen(); 
    } 
</script> 
    </head> 
    <body> 
    <center> 
    <h3>Binding JavaScript code to Android code</h3> 
     <div id="content"> 
//some content here 
     </div> 
    <div> 
    Here are few examples: 
    </div> 
    <div> 
     <input type="button" value="Make Toast" onClick="showAndroidToast('Toast made by Javascript')" /><br/> 
     <input type="button" value="Trigger Dialog" onClick="showAndroidDialog('This dialog is triggered by Javascript ')" /><br/> 
     <input type="button" value="Take me to Next Screen" onClick="moveToScreenTwo()" /> 
      </div> 
     </center> 
    </body> 
    </html> 

ich diesen obigen Code, aber es funktioniert nicht in android-Studio, versucht, alle posiblities so hat meine Frage hier veröffentlicht.

Meine Studie für diese: -

https://developer.android.com/guide/webapps/webview.html 
https://developer.android.com/reference/android/webkit/WebView.html 
http://stackoverflow.com/questions/4325639/android-calling-javascript-functions-in-webview 

Antwort

2

Ihre Methoden innerhalb WebAppInterface Klasse fehlen die @JavascriptInterface Anmerkung.

Ihre WebAppInterface Klasse so sein sollte,

public class WebAppInterface { 
    Context mContext; 

    WebAppInterface(Context c) { 
     mContext = c; 
    } 

    @JavascriptInterface 
    public void showToast(String toast) { 
    } 

    @JavascriptInterface 
    public void showDialog(String dialogMsg){ 
    } 

    @JavascriptInterface 
    public void moveToNextScreen(){ 
    } 

} 

bearbeiten

Vergessen Sie nicht, Ihre App API17 zu begrenzen +, wenn Web-Inhalte in die WebView Laden, sonst wird Ihre App anfällig sein zu Angriffen. Lies @ Roberts Kommentar unten.

+0

Sie haben gerade meinen Tag gerettet! , Dummer Fehler dort .. glatt arbeiten! . Danke, dass du mir geholfen hast. – Vikrant

+0

Ich bin froh, dass ich helfen konnte. Viel Glück :) –

+1

@Vikrant Vergessen Sie nicht, Ihre App auf API17 + zu beschränken, wenn Sie Webinhalte in das WebView laden, da Ihre App sonst anfällig für Angriffe ist. – Robert

Verwandte Themen