(编辑以更好地描述我给出的答案)
我在 InterfaceBuilder 中创建了一个非常简单的浏览器,由一个导航栏和一个 webview 组成。
一切正常,除了当我尝试在输入字段之间切换是 web 视图时,焦点转到导航栏。
我假设我需要对响应者链做一些事情,但我无法弄清楚是什么。
有什么建议吗?
谢谢,凯利
(编辑以更好地描述我给出的答案)
我在 InterfaceBuilder 中创建了一个非常简单的浏览器,由一个导航栏和一个 webview 组成。
一切正常,除了当我尝试在输入字段之间切换是 web 视图时,焦点转到导航栏。
我假设我需要对响应者链做一些事情,但我无法弄清楚是什么。
有什么建议吗?
谢谢,凯利
世界上可能没有其他人关心这个,但我会回答它,以防有人在某个时候需要这个。
正如我在评论中提到的,我正在使用卡布奇诺框架,实际上我遇到了 3 个不同的问题。
让我给你这里的设置。
我正在创建一个嵌入了 WebView 的可可应用程序,并加载了一个带有卡布奇诺应用程序的页面。起初,字段之间的选项卡对于任何网页上的任何表单都不太适用。
其次是dom事件中的keyCode和charCode与cocoa到Safari中的WebView不同的问题。事实证明,有一种叫做“键盘怪癖”模式的东西。如果您_needsKeyboardEventDisambiguationQuirks
在
WebView ObjC 类源中查找,您会看到它为 safari 设置了异常,将其关闭。它应该为旧版本的 WebKit 关闭它,但它没有。请参阅webkit 错误 32694
为了解决这个问题,我必须做两件不同的事情。a) 覆盖_needsKeyboardEventDisambiguationQuirks
,使其返回 NO b) 如果 WebView 在您覆盖该方法时已经实例化,您还需要调用[[webviewinstance preferences] _postPreferencesChangesNotification]
以使其工作。这会让你的 WebView 像 Safari 一样发送 DOM 事件。
最后,cappuccino 正在查看用户代理字符串以确定如何处理某些内容。它正在检查 WebKit 和 Safari。我抄写了 safari 用户代理字符串并将其设置为 WebView 的自定义用户代理字符串。
[mywebviewinstance setCustomUserAgent: @"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; en-us) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4"]
最后,一切都像在 safari 中一样工作。
希望这对某人有帮助!