javascript - apple - wkwebview code



Quali sono alcuni metodi per eseguire il debug di Javascript all'interno di UIWebView? (5)

Non ho ancora provato questo, ma dai un'occhiata a questo Weinre

Sembra molto promettente.

https://src-bin.com

Sto cercando di capire perché qualcosa con Javascript non funziona all'interno di una UIWebView. Per quanto ne so, non c'è modo di impostare un breakpoint all'interno di XCode per un file js. No problemo, tornerò indietro al 2004 e userò gli statisti attenti ... oh, aspetta che non sembrino funzionare all'interno di UIWebView!

L'unica cosa che potrei pensare è esportare i miei file HTML e JS sul mio desktop e poi fare il mio debug all'interno di Safari. E quello funziona! Ma ovviamente, il bug con cui sto combattendo in UIWebView non si verifica in Safari.

Ci sono altri modi per eseguire il debug all'interno di UIWebView o qualche trucco che io possa usare come metodo di avviso old-school?


Answer #1

Puoi configurare un sistema come quello usato in PhoneGap per inviare messaggi da JavaScript a Objective-C e accedere da lì. In poche parole, impostano document.location con uno schema personalizzato e bloccano tale schema nel callback delegato.

È possibile sfruttare il fatto che UIWebView è la maggior parte dei delegati per una WebView. WebKit è tecnicamente non documentato per iPhone, ma per lo più identico a quello specificato nelle intestazioni WebKit desktop, possibilmente incluso WebScriptObject. Lo uso per il debug, ma assicurati di togliere questo codice prima di inviarlo ad Apple.

Per ottenere una WebView da una UIWebView, implementare un metodo delegate come -(void) webView:(id)inWebView didFinishLoadForFrame:(id)inWebFrame in una sottoclasse di UIWebView. Chiama eccellente se lo usi.


Answer #2

Questa query è in cima a google, quindi vale la pena di collegarsi a remoteInspector nascosto in iOS5 - di gran lunga il modo migliore trovato finora per eseguire il debug di UIWebViews - compilare solo condizionalmente prima di inviarlo ad Apple.


Answer #3

Se stai usando iOS> = 6 e hai Mountain Lion (10.8) o Safari> = 6, puoi semplicemente:

  1. Apri l'applicazione nel simulatore (o il tuo dispositivo in XCode> = 4.5.x).
  2. Apri Safari (vai su Preferences -> Advanced e assicurati che "Mostra menu Sviluppo nella barra dei menu" sia attivo.
  3. Dalla barra dei menu (di Safari) seleziona Develop -> iPhone Simulator -> [your webview page] .

Questo è tutto !


Answer #4

alert () funziona sicuramente per me.

Tuttavia, puoi anche fare molte altre cose, come creare il tuo avviso DHTML che si apre in un livello. Questo può essere utile perché puoi fare più avvisi su un singolo div, senza interrompere la tua app. Dovresti anche essere in grado di scrivere una traccia di stack (la traccia dello stack si trova nell'oggetto eccezione e puoi sempre lanciare le tue eccezioni).

In alternativa, se si esegue il simulatore, il proprio "alert ()" personalizzato può chiamare nell'obiettivo C e visualizzare la stringa nella finestra della console del simulatore iPhone:

document.location.href = "http://debugger/" + 
   encodeURIComponent(outputString);   

e sul lato obiettivo C:

//--------------------------------------------------------------------
- (BOOL)webView:(UIWebView*)webView 
       shouldStartLoadWithRequest: (NSURLRequest*)req 
       navigationType:(UIWebViewNavigationType)navigationType {
    if ([[[req URL] host] isEqualToString:@"debugger"]){
        // do stuff with [[req URL] path] 
       }
}

Detto questo, ho un'app che è pesante su UiWebView / javascript e tendo a fare la maggior parte degli sviluppatori di javascript in Chrome (simulando ciò che è necessario dall'ambiente iPhone)





uiwebview