2016-05-11 51 views
3

プログラムでWkWebviewに読み込まれたwebappのコンソールログを読み込もうとしています。プログラムでwkwebviewのコンソールログを読む方法

これまで私の研究では不可能でした。

これを達成するための助けがあれば幸いです!

+0

これらのメッセージが利用可能な間にこれらのログを読む必要がある理由あなたのjsファイルに?どこにでも簡単に保管できます。 –

+0

Webviewに読み込まれるこのWebアプリケーションは既に開発されており、このためにwebdevelopersからの変更は期待できません.thth Y – NaveenKumar

答えて

-1

この美しいアプリ内 "Bridge"

編集使用してください:次に

self.webView = [[WBWKWebView alloc] initWithFrame:self.view.bounds]; 
self.webView.JSBridge.interfaceName = @"WKWebViewBridge"; 
WBWebDebugConsoleViewController * controller = [[WBWebDebugConsoleViewController alloc] initWithConsole:_webView.console]; 

、あなたが使用できるデリゲートメソッド:

- (void)webDebugInspectCurrentSelectedElement:(id)sender 
{ 
// To use the referenced log values 
} 
+0

この 'let context = self.webView.valueForKeyPath(" documentView.webView。 mainFrame.javaScriptContext ")を! JSContext' ..私はWkwebviewを使用しています – NaveenKumar

+0

ええ...エラーは実行時エラー...クラッシュ.. – NaveenKumar

+0

はいバディー...しかし、私はちょうどプログラムで私のアプリでJSコンソールのログを読み取る... – NaveenKumar

0

通常、コンソールロギングがで定義されているがjsとして

"window.addEventListener("message",function(e){console.log(e.data)});" 

私の答えはhandling-javascript-events-in-wkwebviewから適応されました!

設定

let config = WKWebViewConfiguration() 
    let source = "document.addEventListener('message', function(e){ 
    window.webkit.messageHandlers.iosListener.postMessage(e.data); })" 
    let script = WKUserScript(source: source, injectionTime: .atDocumentEnd, forMainFrameOnly: false) 
    config.userContentController.addUserScript(script) 
    config.userContentController.add(self, name: "iosListener") 
    webView = WKWebView(frame: UIScreen.main.bounds, configuration: config) 

またはメッセージを受信するWKScriptMessageHandlerプロトコルを実装プロパティ "estimatedProgress" を観察し、evalueate JavaScriptの

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context 
    { 
     if ([keyPath isEqualToString:@"estimatedProgress"]) 
     { 
      CGFloat progress = [change[NSKeyValueChangeNewKey] floatValue]; 
      if (progress>= 0.9) 
      { 
       NSString *jsCmd = @"window.addEventListener(\"message\",function(e){window.webkit.messageHandlers.iosListener.postMessage(e.data)});"; 
     //@"document.addEventListener('click', function(e){ window.webkit.messageHandlers.iosListener.postMessage('Customize click'); })"; 

       [_webView evaluateJavaScript:jsCmd completionHandler:^(id _Nullable obj, NSError * _Nullable error) { 
        NSLog(@"error:%@",error); 
       }]; 
      } 
     } 
    } 

でJSを注入KVOを使用して初期化WKWebView:

func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) 
    { 
      print("message: \(message.body)") 
      // and whatever other actions you want to take 
    } 
関連する問題