代码之家  ›  专栏  ›  技术社区  ›  bpapa

在uiwebview中调试javascript的方法有哪些?

  •  125
  • bpapa  · 技术社区  · 15 年前

    我正试图弄明白为什么JavaScript的某些功能不能在uiWebView内部工作。据我所知,无法在Xcode内部为JS文件设置断点。没问题,我将回到2004年,使用Alert Statemen——哦,等等,它们似乎也不能在uiWebView中工作!

    我唯一能想到的就是将HTML和JS文件导出到桌面,然后在Safari内部进行调试。那就行了!当然,我在uiwebview中遇到的bug不会出现在Safari中。

    有没有其他调试uiWebView内部的方法,或者类似于使用旧的学校警报方法的任何技巧?

    7 回复  |  直到 7 年前
        1
  •  256
  •   refaelos    11 年前

    如果您使用的是iOS>=6,并且您有Mountain Lion(10.8)或Safari>=6,则可以:

    1. 在模拟器中打开应用程序(或在xcode>=4.5.x中打开设备)。
    2. 打开Safari(转到 Preferences -> Advanced 并确保“在菜单栏中显示开发菜单”处于打开状态。
    3. 从(Safari)菜单栏中选择 Develop -> iPhone Simulator -> [your webview page] .

    就是这样!

        2
  •  31
  •   Dan Bennett    13 年前

    这个查询最适合谷歌,因此值得链接到 remoteInspector hidden in iOS5 -到目前为止,找到了调试uiwebview的最佳方法——只需在发送到苹果之前先进行条件编译。

        3
  •  9
  •   rob    15 年前

    alert()当然适用于我。

    但是,你也可以做很多其他的事情,比如让你自己的DHTML警报出现在一个层中。这很好,因为您可以对单个分区执行多个警报,而不必停止应用程序。您还应该能够向它写入堆栈跟踪(堆栈跟踪位于异常对象中,并且您可以始终抛出自己的异常)。

    或者,如果在模拟器上运行,您的自定义“alert()”可以调用目标C,并在iPhone模拟器的控制台窗口中显示字符串:

    document.location.href = "http://debugger/" + 
       encodeURIComponent(outputString);   
    

    在目标C方面:

    //--------------------------------------------------------------------
    - (BOOL)webView:(UIWebView*)webView 
           shouldStartLoadWithRequest: (NSURLRequest*)req 
           navigationType:(UIWebViewNavigationType)navigationType {
        if ([[[req URL] host] isEqualToString:@"debugger"]){
            // do stuff with [[req URL] path] 
           }
    }
    

    也就是说,我有一个对uiwebview/javascript很重要的应用程序,我倾向于在chrome中执行大多数javascript开发(模拟iPhone环境中的必要功能)。

        4
  •  6
  •   reevesy onejigtwojig    13 年前

    我还没试过,不过看看这个 Weinre

    看起来很有前途。

        5
  •  4
  •   Kazekage Gaara    10 年前

    这是个老问题。但我还是想分两分。

    我一直在用 jsconsole.com 用于远程调试。这很容易。只需包含一个脚本标记,并使用控制台日志通过打印进行调试。这也可以用于在实际设备上进行调试。

        6
  •  2
  •   talsibony    7 年前

    老问题,但我觉得我找到了最好的解决方案,在我的情况下,你需要调试uiwebview,但我没有访问iOS应用程序,只有HTML内容,我不得不查看一些JS日志,我添加了以下代码来加载light firebug JS并自动显示它:

    从JS调用它

    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.src = 'https://getfirebug.com/firebug-lite-debug.js';
    document.head.appendChild(script);
    

    或者从HTML加载

    <script type="text/javascript" src="https://getfirebug.com/firebug-lite-debug.js"></script>
    
        7
  •  -1
  •   drawnonward    15 年前

    你可以建立一个类似于 PhoneGap 将消息从javascript发送到Objective-C并从那里记录。简言之,他们正在使用自定义方案设置document.location,并在委托回调中阻止该方案。

    您可以利用这样一个事实:uiWebView是WebView的大多数委托。webkit在技术上对于iphone是未记录的,但大部分与桌面webkit头文件中指定的相同,可能包括webscriptobject。我使用它进行调试,但是在提交给苹果之前一定要去掉这些代码。

    要从UIWebView获取WebView,请实现如下委托方法 -(void) webView:(id)inWebView didFinishLoadForFrame:(id)inWebFrame 在uiWebView的子类中。如果你用的话打电话给Super。

    推荐文章