1. ホーム
  2. javascript

[解決済み] iOS UIWebViewでのJavascript console.log()機能

2023-05-10 10:19:27

質問

UIWebViewでiPhone/iPadアプリを書くと、コンソールが表示されない。 この優れた回答 は、エラーをトラップする方法を示していますが、私はconsole.log()も使いたいと思っています。

どのように解決するのですか?

私は、アプリのデバッグコンソールに、javascriptを使用してログを記録するためのソリューションを持っています。 少し粗雑ですが、動作します。

まず、javascript で console.log() 関数を定義し、ios-log: の URL を持つ iframe を開いてすぐに削除します。

// Debug
console = new Object();
console.log = function(log) {
  var iframe = document.createElement("IFRAME");
  iframe.setAttribute("src", "ios-log:#iOS#" + log);
  document.documentElement.appendChild(iframe);
  iframe.parentNode.removeChild(iframe);
  iframe = null;    
};
console.debug = console.log;
console.info = console.log;
console.warn = console.log;
console.error = console.log;

さて、このURLをiOSアプリのUIWebViewDelegateでshouldStartLoadWithRequest関数を使ってキャッチする必要があります。

- (BOOL)webView:(UIWebView *)webView2 
shouldStartLoadWithRequest:(NSURLRequest *)request 
 navigationType:(UIWebViewNavigationType)navigationType {

    NSString *requestString = [[[request URL] absoluteString] stringByReplacingPercentEscapesUsingEncoding: NSUTF8StringEncoding];
    //NSLog(requestString);

    if ([requestString hasPrefix:@"ios-log:"]) {
        NSString* logString = [[requestString componentsSeparatedByString:@":#iOS#"] objectAtIndex:1];
                               NSLog(@"UIWebView console: %@", logString);
        return NO;
    }

    return YES;
}