31

我在 Safari 中使用带有闪亮的新 Web Inspector 的 iOS 6 模拟器。

问题:是否可以在加载 iOS 6 Web 应用程序时自动加载 Web Inspector?

我正在使用 PhoneGap/Cordova,并且在启动时加载了很多 javascript。我console.log()广泛用于调试,并希望它在应用程序启动后加载 Web Inspector。

目前,当我在 Xcode 上点击 Run 时,应用程序会加载并且我setTimeout在我的第一个功能上,因此我可以冲到 Safari 并在该页面上附加 Web Inspector。

我更愿意删除此步骤并添加一个可以直接加载 Web Inspector 的自动化步骤。

还有其他解决方案吗?

4

3 回答 3

3

这是部分解决方案。这将一键打开 Safari 的调试窗口,这要好得多,但不是自动的。

在你的 Mac 上打开Script Editor(Command + Space Bar 并在脚本编辑器中输入)

粘贴此代码:

-- `menu_click`, by Jacob Rus, September 2006
-- 
-- Accepts a list of form: `{"Finder", "View", "Arrange By", "Date"}`
-- Execute the specified menu item.  In this case, assuming the Finder 
-- is the active application, arranging the frontmost folder by date.

on menu_click(mList)
    local appName, topMenu, r

    -- Validate our input
    if mList's length < 3 then error "Menu list is not long enough"

    -- Set these variables for clarity and brevity later on
    set {appName, topMenu} to (items 1 through 2 of mList)
    set r to (items 3 through (mList's length) of mList)

    -- This overly-long line calls the menu_recurse function with
    -- two arguments: r, and a reference to the top-level menu
    tell application "System Events" to my menu_click_recurse(r, ((process appName)'s ¬
        (menu bar 1)'s (menu bar item topMenu)'s (menu topMenu)))
end menu_click

on menu_click_recurse(mList, parentObject)
    local f, r

    -- `f` = first item, `r` = rest of items
    set f to item 1 of mList
    if mList's length > 1 then set r to (items 2 through (mList's length) of mList)

    -- either actually click the menu item, or recurse again
    tell application "System Events"
        if mList's length is 1 then
            click parentObject's menu item f
        else
            my menu_click_recurse(r, (parentObject's (menu item f)'s (menu f)))
        end if
    end tell
end menu_click_recurse

menu_click({"Safari", "Develop", "IOS Simulator", "index.html"})

打开模拟器后,单击脚本上的运行(您可能需要第一次在设置中允许脚本编辑器)。

(可选)您可以将脚本保存为应用程序,这样您就不必打开脚本编辑器。

(这个答案是加拉丁先前答案的更详细版本)

于 2015-04-23T14:37:07.807 回答
2

现在是 2014 年年中,据我所知,仍然没有优雅的解决方案,但我喜欢在setTimeout应用程序的初始化代码中添加短暂暂停的想法。如果setTimeout无法添加调用,您还可以window.location.reload()从 Safari 控制台发出命令以重新启动应用程序,从而获得全面调试的好处。

于 2014-05-30T16:14:59.293 回答
1

1)在您的 OnDeviceReady 处理程序中添加调试器;

onDeviceReady: function() {
    debugger;
    // the rest of your device ready code
}

2) 通过 xcode 或 cmdline 运行应用程序。

3) 通过 Safari->Develop->Simulator->Appname -> index file 附加调试器

4)打开safari的控制台视图,输入:

Window.location = "";

5) 应用程序将重新加载,调试器将附加到 onDeviceReady() 的第一行。

6) 正常调试。

于 2015-10-23T14:21:46.380 回答