2010-11-13 7 views
0

J'ai un formulaire HTML dans un WebView. Le contrôle de formulaire ressemble à un bouton normal, mais il s'agit en fait d'un fichier html avec un arrière-plan transparent. Lorsque j'appuie sur le bouton de soumission HTML, je veux que le résultat s'ouvre dans le navigateur, pas dans le webview. Actuellement, il ouvre dans le WebView actuel qui détruit ma mise en page.Ouvrir le formulaire WebView dans le navigateur en appuyant sur le bouton de soumission

Comment faire?

Voici mon formulaire

<string name="googlecheckout_html_button"> 
<![CDATA[ 
<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?> 
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"> 
<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\"> 
    <head> 
    <title>Google Checkout Button</title> 
    <script type=\"text/javascript\" language=\"javascript\"> 
     function pass() { 
      return javaInterface.checkboxPass(); 
     } 
    </script> 
    </head> 
    <body> 
     <form style=\"width: 121px;margin-left: auto;margin-right: auto;\" onsubmit=\"return pass();\" action=\"https://%1$sapi/checkout/v2/checkoutForm/Merchant/%2$s\" id=\"BB_BuyButtonForm\" method=\"post\" name=\"BB_BuyButtonForm\"> 
      <input name=\"item_name_1\" type=\"hidden\" value=\"%3$s\" /> 
      <input name=\"item_description_1\" type=\"hidden\" value=\"%3$s\" /> 
      <input name=\"item_quantity_1\" type=\"hidden\" value=\"1\" /> 
      <input name=\"item_price_1\" type=\"hidden\" value=\"%4$s\" /> 
      <input name=\"item_currency_1\" type=\"hidden\" value=\"%5$s\" /> 
      <input name=\"_charset_\" type=\"hidden\" value=\"utf-8\" /> 
      <input type=\"hidden\" name=\"shopping-cart.items.item-1.merchant-private-item-data\" value=\"%6$s\" /> 
      <input alt=\"Pay With Google Checkout\" src=\"https://%1$sbuttons/buy.gif?merchant_id=%2$s&amp;w=121&amp;h=44&amp;style=trans&amp;variant=text&amp;loc=en_US\" type=\"image\" /> 
     </form> 
    </body> 
</html> 
]]> 
</string> 

Je puis en utilisant String.format (arg ...) pour remplir les champs avec des valeurs appropriées.

Voici par WebView

String form = String.format(getString(R.string.googlecheckout_html_button), 
         host, 
         merchantId, 
         item_name_1, 
         item_price_1, 
         item_currency_1, 
         private_item_data 
         ); 

       if(Logging.DEBUG) Log.d(TAG, form); 

       browser = new WebView(ActivityActivate.this); 
       browser.setBackgroundColor(0); 
       browser.getSettings().setJavaScriptEnabled(true); 
       browser.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); 
       browser.getSettings().setSupportZoom(true); 
       browser.setWebViewClient(new WebViewClient() { 
        @Override 
        public boolean shouldOverrideUrlLoading(WebView view, 
          String url) { 
         return false; 
        } 
       }); 
       //browser.getSettings().setLoadsImagesAutomatically(true); 

       browser.addJavascriptInterface(new JavascriptInterface(), "javaInterface"); 
       //browser.loadData(header+formData+footer, "text/html", "UTF-8"); 
       browser.loadDataWithBaseURL("https://checkout.google.com", form, "text/html", "UTF-8", null); 
       llPaymentButtons.addView(browser); 
+0

êtes-vous d'avoir un fichier HTML et que vous souhaitez ouvrir dans WebView? –

+0

@PM non, je l'ai déjà dans un webview, je quand je clique sur le bouton soumettre dans le webview je veux le charger dans le navigateur. – jax

Répondre

1

Les formulaires sont soumis à des serveurs non aux navigateurs. Assurez-vous d'avoir une adresse URL correcte lorsque vous envoyez le formulaire.

Pour résoudre votre problème, vous devez remplacer WebViewClient.shouldOverrideUrlLoading(..):

webview.setWebViewClient(new WebViewClient() { 
    public void shouldOverrideUrlLoading (WebView view, String url) { 
     return false; 
    } 
}); 
+0

J'ai essayé ceci et cela n'a toujours pas fonctionné. Il est toujours ouvert dans le webview, pas une nouvelle fenêtre de navigateur. \t \t \t \t browser.setWebViewClient (nouveau WebViewClient() { \t \t \t \t \t @Override \t \t \t \t \t shouldOverrideUrlLoading public boolean (vue WebView, \t \t \t \t \t \t \t url String) { \t \t \t \t \t \t return false; \t \t \t \t \t} \t \t \t \t}); – jax

+0

Assurez-vous de ne pas utiliser 'browser.setWebViewClient (..)' plusieurs fois. –

+0

juste une occurrence est présente dans le code – jax

Questions connexes