当使用UIWebView编写iPhone/iPad应用程序时,控制台不可见. this excellent answer显示了如何捕获错误,但我也想使用console.log().

推荐答案

我有一个解决方案,可以使用javascript登录到应用程序调试控制台. 它有点粗糙,但很管用.

首先,我们定义控制台.javascript中的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;

现在,我们必须在iOS应用程序的UIWebViewDelegate中使用shouldStartLoadWithRequest函数捕捉这个URL.

- (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;
}

Ios相关问答推荐

如何将 ImageView 放置在 UIView 的中心?

将flutter android项目导入iOS

Flutter 错误:“CocoaPods not installed or not in valid state.”

如何在 Swift 中使用命名空间?

CocoaPods 找不到 pod“Firebase/Core”的兼容版本 | cloud_firestore, Flutter

CocoaPods 找不到 pod“Firebase/CoreOnly”的兼容版本

为什么我在 iOS13.2 中加载 WKWebView 时收到控制台警告:[Process] kill() 返回意外错误 1?

如何告诉 SwiftUI 视图绑定到嵌套的 ObservableObjects

错误 Appstore 连接:Info.plist 文件中缺少目的字符串

滑动列表项以获取更多选项(Flutter)

UICollectionView,全宽单元格,允许自动布局动态高度?

UISearchBar 在 iOS 11 中增加导航栏高度

错误 ITMS-90717:“无效的 App Store 图标”

缺少营销图标

“项目名称”是经过优化编译的 - 步进可能会表现得很奇怪;变量可能不可用

iOS11 中奇怪的 uitableview 行为.带有导航推送动画的单元格向上滚动

远程推送通知是否需要在 Info.plist 中添加 UIBackgroundModes?

Xcode 8,iOS 10 -“为进程启动 WebFilter 日志(log)记录”

如何在 Xcode 9 中使用 iOS 11、Apple TV 4K 等进行无线调试?

所有小部件的Flutter 填充?