2014-10-03 11 views
6

Ho un'app contenente una WebView. Quando <!DOCTYPE html> non è definito in una pagina HTML, genera errori imprevisti poiché snippet che eseguo sono compatibili solo con HTML5.Imposta stranezze per WebView

Quindi, invece di scrivere <!DOCTYPE html> ogni volta, posso semplicemente impostare il quirk predefinito (quirk è una dichiarazione HTML predefinita che verrà utilizzata se la versione HTML di una pagina non è specificata).

Quindi, se la dichiarazione HTML della pagina non viene specificata, verrà automaticamente visualizzata in HTML5.

Qualche idea su come fare questo? I principali browser utilizzano questa tecnica (incluso Chrome per Android).

EDIT

Ho oltre 500 frammenti di questo tipo utilizzando SVG direttamente incorporato ecc -

<svg width="300" height="200"> 
    <polygon points="100,10 40,198 190,78 10,78 160,198" 
      style="fill:lime;stroke:purple;stroke-width:5;fill-rule:evenodd;" /> 
</svg> 

Questi frammenti non funzionano bene su altre versioni di HTML. In realtà non ho alcun problema nello scrivere <!DOCTYPE html> su ogni pagina, ma sono preoccupato per i miei clienti che possono vedere, modificare e modificare i miei frammenti o anche creare un nuovo snippet.

Ho dato la mia app ai miei amici per i test e molti di loro si sono lamentati dei frammenti che hanno creato non funzionano correttamente e penso che lo stesso genere di cose possa accadere anche ai miei clienti.

Si prega di aiutare

+0

solo per informazioni, l'aggiunta di ogni volta è un'azione normale. Tu * dovresti * (e nota * devi *) fornire quale versione HTML stai usando. – mithrop

+0

Hai provato a provare un codice HTML su Google Chrome o Firefox? Hai notato che se non hai aggiunto il '', la pagina verrà automaticamente renderizzata nella ** ultima versione HTML disponibile **? Questo è quello che voglio. Voglio impostare un valore predefinito '' che verrà usato se non avessi specificato quale versione HTML in * uno qualsiasi dei miei file HTML *. – Confuse

+0

Non ero un fratello sarcastico. Anche se la domanda non ti era chiara. Stavo dando una taglia per una buona risposta, quindi passa una bella giornata. – Confuse

risposta

1

EDIT: Chrome per Android non usa WebView [Source]:

Questo significa Chrome per Android sta usando il WebView?

No, Chrome per Android è separato da WebView. Sono entrambi basati sullo stesso codice, incluso un motore JavaScript e un motore di rendering comuni.

Quindi hanno aggiunto questa funzionalità al normale comportamento di WebView. Quello che vuoi realizzare non è possibile.


Credo che l'unico modo in cui questo sarebbe possibile (in base alle mie ricerche) è quello di ignorare il comportamento WebView e fare qualcosa di simile, invece:

  1. Cattura l'URL desiderato
  2. Usa HttpClient per recuperare il contenuto della pagina
  3. Verificare <!DOCTYPE > tag, e aggiungere se non esiste
  4. Usa WebView.loadDataWithBaseURL per il rendering HTML nella WebView e specificare l'URL di base catturati in fase 1

Ovviamente questo è molto hacky e non posso confermare se funziona a tutti. Pertanto, la soluzione migliore è quella di specificare il tag <! DOCTYPE su ogni pagina. Se ciò richiede la convalida di snippet prima di caricare/consentire ai client di crearli, allora così sia.

+0

Downvotes? Immagino che il silenzio e nessuna soluzione siano preferibili a qualcuno che cerca di aiutare ... –

+1

Non ti ho minimizzato. Grazie per il consiglio. Ma mi chiedo ancora come funziona Chrome per Android. – Confuse

+0

Sì, anche io. È frustrante quando Google sembra darsi privilegi speciali. –

Problemi correlati