プログラムでWkWebviewに読み込まれたwebappのコンソールログを読み込もうとしています。プログラムでwkwebviewのコンソールログを読む方法
これまで私の研究では不可能でした。
これを達成するための助けがあれば幸いです!
プログラムでWkWebviewに読み込まれたwebappのコンソールログを読み込もうとしています。プログラムでwkwebviewのコンソールログを読む方法
これまで私の研究では不可能でした。
これを達成するための助けがあれば幸いです!
この美しいアプリ内 "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
}
この 'let context = self.webView.valueForKeyPath(" documentView.webView。 mainFrame.javaScriptContext ")を! JSContext' ..私はWkwebviewを使用しています – NaveenKumar
ええ...エラーは実行時エラー...クラッシュ.. – NaveenKumar
はいバディー...しかし、私はちょうどプログラムで私のアプリでJSコンソールのログを読み取る... – NaveenKumar
通常、コンソールロギングがで定義されているが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
}
に
これらのメッセージが利用可能な間にこれらのログを読む必要がある理由あなたのjsファイルに?どこにでも簡単に保管できます。 –
Webviewに読み込まれるこのWebアプリケーションは既に開発されており、このためにwebdevelopersからの変更は期待できません.thth Y – NaveenKumar