首页 文章

使用webkit远程调试启动移动浏览器

提问于
浏览
27

Google I/O 2011: Chrome Dev Tools Reloaded,保罗爱尔兰和帕维尔费尔德曼介绍了新的remote debugging功能 - 该功能正在通过included into webkit .

这是个好消息,特别是对于移动网络开发者 . 但是我们如何启用它,例如启动IOS模拟器,或者只是在iPhone上运行Safari Mobile? (对于chrome,这通常在启动时使用 --remote-debugging-port=9222 选项完成) .

我尝试在safari设置中启用开发人员模式( Settings > Safari > Developer > Debug Console: ON )但没有成功......

我不知道这里的android,但 does anyone know when Apple (Safari Mobile) or Google (android's browser) will include this new feature so we can enjoy remote-debugging in mobile development?

谢谢 .

参考:http://paulirish.com/2011/a-re-introduction-to-the-chrome-developer-tools/#comment-63113

8 回答

  • 1

    目前还没有移动浏览器实现webkit远程调试协议 . (也许你可以获得支持它的android的自定义构建)

    然而,有weinre,它为您提供了一个远程版本的Web检查器 . 但是您必须在页面中包含一些代码才能支持它 . (因为它不是浏览器功能) .

    Weinre website

    Weinre github repo

  • 4

    Safari on iOS 6 在iOS6中,您现在可以从Safari 6(仅限OS X)进行远程调试 . 在设备上,打开“设置”>“Safari”>“高级”>“启用Web检查器” . 打开Safari首选项,高级,检查"Show Develop menu in menu bar" . 使用USB线连接iPhone / iPad . 现在,在“开发”菜单栏下,您应该获得设备的子菜单,其中包含您在设备上的Safari中打开的选项卡 .

    Safari on iOS 7 除上述要求外,您还需要Safari 6.1,目前(2013年10月8日)仅供开发人员使用:https://developer.apple.com/downloads/index.action?name=Safari%206.1

    Chrome on Android 4 在Android上有点复杂 . 有关在Android版Chrome上进行远程调试的说明:https://developers.google.com/chrome/mobile/docs/debugging我还没有找到在Android默认浏览器(v4.04)中启用远程调试的方法 .

  • 0

    看一下这个bash脚本,用iOS模拟器启动远程检查器:https://gist.github.com/2241976

  • 2

    它现在在Chrome for Android中得到支持 .

  • 12

    仅仅因为某个功能在WebKit的一个端口(在本例中为Apple和Chromium)中实现,并不意味着它总是在其他地方可用 . 我在关于different WebKit ports implementation的博文中详细写了这个 .

    到目前为止,唯一具有远程调试功能的移动WebKit端口是RIM Playbook浏览器 .

    对于iOS,很难知道,因为Apple没有提供有关其未来产品的任何信息 . 至少我们知道iOS 5不会有它,因为beta版本没有显示任何相关内容 .

    对于Android,它肯定会在未来的版本中出现,因为Android人员将adopting Chromium作为其WebKit的新基础 .

  • 1

    Nathan de Vries想出了如何在模拟器中运行的iOS5上执行此操作 . 它围绕调用私有 _enableRemoteInspector 方法 .

    阅读 . 摘要如下:

    要为Mobile Safari启用此功能,请使用gdb附加到它并调用方法:

    MobileSafari_PID=$(ps x | grep "MobileSafari" | grep -v grep | awk '{ print $1 }')
    
    if [ "$MobileSafari_PID" == "" ]; then
      echo "Mobile Safari.app must be running in the Simulator to enable the remote inspector."
    else
    
      cat <<EOM | gdb -quiet > /dev/null
      attach $MobileSafari_PID
      p (void *)[WebView _enableRemoteInspector]
      detach
    EOM
    

    科幻

    然后访问检查员 http://localhost:9999/ .

    使用嵌入式 UIWebView ,启用它如下:

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
      // ...Snipped...
      [NSClassFromString(@"WebView") _enableRemoteInspector];
      // ...Snipped...
    }
    

    在一个真实的设备上它不起作用,可能是因为该端口是防火墙 - 如果你有一个越狱设备,你可以解决(如果你这样做,请更新我们) .

  • 1

    Thomas指出了一个很好的远程调试资源,但是他说你需要将代码添加到网页中 . 这并不严格,因为我们还允许通过bookmarklet进行交互 . 部分向下here(在方便地称为"Using a bookmarklet"的部分下),它说它应该适用于Android 2.2和iOS .

    一些相关的事项需要注意:

    • 它不允许您调试启动错误(必须加载页面才能打开书签) .

    • 如果丢失连接似乎没有重新连接(您必须刷新页面才能再次 Build 连接) .

    • 如果你的js已经坏了,它也会被打破 .

    也可以(我自己完成)使用webview从android浏览器“调试”代码 . 您可以让webview捕获所有方法调用(即console.log) . 使用它可以捕获并保存或转发消息到logcat .

    与您已经尝试过的方法相关 - 当您在iOS上启用调试控制台时,您在哪里寻找交互/日志记录输出?更具体地说,您是否在xCode / iPhone模拟器中检查了调试控制台?

  • 6

    Adobe的Shadow实用程序(刚刚发布)允许您使用_1030858远程调试,而无需在网页中注入任何代码 . 它适用于Windows和Mac上的Chrome作为"master"浏览器,并且会将每个页面导航同步到运行iOS或Android客户端的任意数量的设备 .

    请注意,我们自己有点受限 . 例如,您将无法访问“网络”选项卡 .

相关问题