Android webView shouldOverrideUrlLoading per iframes

Ho un sito web locale che è controllato da Javascript e lo sto caricando in un WebView. Il sito web è veramente una pagina principale con un iframe il cui contenuto cambia in base all'utenza dell'utente. C'è un button "Avanti" nella pagina principale che esegue alcune funzioni javascript e decide quale pagina da caricare nell'host (via document.getElement (…). Src =)

In Android 2.1 le cose funzionavano bene – simulate e sul telefono. La webview ha caricato tutte le pagine correttamente. Ho testato su un telefono 2.2 e each volta che faccio clic su Avanti la pagina (che dovrebbe essere caricata nell'IFrame) viene caricata nel browser predefinito.

  • Lo schermo dell'emulatore si blocca quando si cerca di eseguire l'applicazione Android
  • Cambiare il colore di un button di scelta rapida
  • Sapere quando una vista in un ListView è scomparsa sullo schermo?
  • Android: come ascoltare gli events di scorrimento?
  • Seleziona l'image da galleria e mostra in immagini
  • aggiungere l'image personalizzata come Emoji in android
  • Ho definito un filter di intenti

    <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="file" android:host="*" android:pathPrefix="sdcard/Android/data/android.website/files/pages" /> </intent-filter> 

    sperando che avrebbe reindirizzato le richieste di pagina all'attività, ma non funziona. L'url è ancora caricato dal browser.

    L'utilizzo di shouldOverredeUrlLoading non funziona bene perché il collegamento caricato è quello del frame interno. Ho provato a caricare il codice javascript che imposta l'url come src dell'IFrame, ma non ha funzionato.

    È strano che questo accada solo sul telefono 2.2. In un emulatore 2.2 funziona bene.

    Qualche idea?

  • Android Come trovare IP dinamico dal dispositivo?
  • Aggiungendo dynamicmente un bambino a LinearLayout con la posizione di each bambino
  • Riproduzione di video locali in WebView su Android
  • L'aggiornamento prende i dati di una row eliminata
  • come impostare solo il valore numbersco per EditTextPreference in android?
  • Come posso creare una visualizzazione di calendario settimanale per un'applicazione Android Honeycomb?
  • 4 Solutions collect form web for “Android webView shouldOverrideUrlLoading per iframes”

    Prova a fornire il proprio WebViewClient a WebView. È necessario ignorare shouldOverrideUrlLoading(..) e restituire false .

    Android 4.x sembra comportrsi come segue:

    shouldOverrideUrlLoading è chiamato solo quando tutta la pagina sta per cambiare.

    L'iframe è solo una parte della pagina. Pertanto non shouldOverrideUrlLoading essere chiamato shouldOverrideUrlLoading .

    public WebResourceResponse shouldInterceptRequest(WebView view, String url) funzionato per me.

    Sembra che non esista un modo adeguato per arrestare il WebResourceResponse . Puoi caricare un altro URL invece:

     public WebResourceResponse shouldInterceptRequest(WebView view, String url) { if( url.contains("myFancyUrl") ) { // Do something try { return new WebResourceResponse("", "", new URL("http://myserver.com/myrootdocument.html").openStream()); } catch(Exception exception) { Log.e( exception.toString() ); } } return super.shouldInterceptRequest(view, url); } 

    Basta confermare che l'overriding del metodo mustOverideUrlLoading (come descritto sopra) ha funzionato per me pure … ho capito di usare il phonegap, quindi ho bisogno di ignorare l'object GapViewClient di phonegap come mostrato di seguito. Same concetto di base però.

     public class XXXX_Activity extends DroidGap { /** Called when the activity is first created. * @param view */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.loadUrl("file:///android_asset/www/RLO/index.htm"); // Overide selected methods in webview client used by phone gap to prevent // iframe replacements from taking over entire web page. super.appView.setWebViewClient(new DroidGap.GapViewClient(this) { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { return false; } }); } 

    Credo che shouldOverrideUrlLoading sia chiamato solo per l'URL della pagina iniziale – non iFrames. Check out onPageFinished (anche nel WebViewClient). Generalmente viene chiamato per each iFrame, anche se ho visto differenze di comportmento tra Android 2.1 e 2.2.

    Notate che onPageFinished restituisce void, quindi non c'è modo di dire al WebView di non disegnare il fotogramma – e in each caso avrebbe dovuto disegnarlo in quel punto. Ma puoi sempre monitorare gli URL in onPageFinished, quindi quando vedi l'URL di interesse, nasconda il WebView (where potrebbe essere necessario passare a un'altra visuale) e quindi avviare la tua nuova attività.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.