SORU
10 EKİM 2008, Cuma


Nasıl benim iPhone Objective-C kodu UİWebView Javascript hataları haberdar olabilir mi?

Objective-C kodu yakalamak Javascript hataları bir UİWebView benim iPhone gerekiyor. Bu istisnalar, söz dizimi hataları zaman dosyalar tanımsız değişken başvuruları, vb yakalanmamış yükleme içerir.

Bu bir geliştirme ortamı için, SDK-koşer olması gerekmez. Aslında, sadece gerçekten simülatörü üzerinde çalışmak gerekiyor.

Zaten gizli Y bakarken, N-C nesneleri JS maruz ve uyarı pop-up durdurmak için örneğin eskiden buldum, ama yine de atlıyorum.

Bir şekilde hata ayıklama bir temsilci kullanarak buldum bunu yazdıktan sonra. [NOT: Orada daha düşük bütçeyle bir hata kullanarak web Müfettiş / konsol?]

CEVAP
10 EKİM 2008, Cuma


Şimdi bir yolu, komut dosyası hata ayıklayıcısı kullanarak Web görünümü (not DEĞİL) UİWebView kitapta buldum. Ben ilk UİWebView alt sınıf bir yöntem eklemek zorunda kaldı

- (void)webView:(id)webView windowScriptObjectAvailable:(id)newWindowScriptObject {
    // save these goodies
    windowScriptObject = newWindowScriptObject;
    privateWebView = webView;

    if (scriptDebuggingEnabled) {
        [webView setScriptDebugDelegate:[[YourScriptDebugDelegate alloc] init]];
    }
}

Gelecek bu ve bunun gibi yöntemleri içeren YourScriptDebugDelegate bir sınıf oluşturmanız gerekir:

// in YourScriptDebugDelegate

- (void)webView:(WebView *)webView       didParseSource:(NSString *)source
 baseLineNumber:(unsigned)lineNumber
        fromURL:(NSURL *)url
       sourceId:(int)sid
    forWebFrame:(WebFrame *)webFrame
{
    NSLog(@"NSDD: called didParseSource: sid=%d, url=%@", sid, url);
}

// some source failed to parse
- (void)webView:(WebView *)webView  failedToParseSource:(NSString *)source
 baseLineNumber:(unsigned)lineNumber
        fromURL:(NSURL *)url
      withError:(NSError *)error
    forWebFrame:(WebFrame *)webFrame
{
    NSLog(@"NSDD: called failedToParseSource: url=%@ line=%d error=%@\nsource=%@", url, lineNumber, error, source);
}

- (void)webView:(WebView *)webView   exceptionWasRaised:(WebScriptCallFrame *)frame
       sourceId:(int)sid
           line:(int)lineno
    forWebFrame:(WebFrame *)webFrame
{
    NSLog(@"NSDD: exception: sid=%d line=%d function=%@, caller=%@, exception=%@", 
          sid, lineno, [frame functionName], [frame caller], [frame exception]);
}

Muhtemelen her kod satırı için hata ayıklama için temsilci de yöntemler giriş-çıkış yığın çerçevesi için çağrılacak kaynağı olarak, çalışma zamanı ve büyük bir etkisi var.

WebScriptDebugDelegate Objective-C tanımı http://www.koders.com/noncode/fid7DE7ECEB052C3531743728D41A233A951C79E0AE.aspx bkz.

Diğer yöntemler:

// just entered a stack frame (i.e. called a function, or started global scope)
- (void)webView:(WebView *)webView    didEnterCallFrame:(WebScriptCallFrame *)frame
      sourceId:(int)sid
          line:(int)lineno
   forWebFrame:(WebFrame *)webFrame;

// about to execute some code
- (void)webView:(WebView *)webView willExecuteStatement:(WebScriptCallFrame *)frame
      sourceId:(int)sid
          line:(int)lineno
   forWebFrame:(WebFrame *)webFrame;

// about to leave a stack frame (i.e. return from a function)
- (void)webView:(WebView *)webView   willLeaveCallFrame:(WebScriptCallFrame *)frame
      sourceId:(int)sid
          line:(int)lineno
   forWebFrame:(WebFrame *)webFrame;

Bu özel bir çerçeve içinde gizlenmiş, böylece App Store gönderdiğiniz kodu koy ve biraz hackery işe almak için hazır olmaya çalış sakın unutmayın.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BDGcustoms

    BDGcustoms

    24 NİSAN 2011
  • Grace Su

    Grace Su

    6 Ocak 2006
  • Peter Sharp

    Peter Sharp

    11 ŞUBAT 2013