让WebView完全像Safari一样行动

时间:2010-12-07 12:12:01

标签: cocoa interface-builder webview first-responder

(编辑以更好地描述我给出的答案)

我在InterfaceBuilder中创建了一个非常简单的浏览器,它包含一个导航栏和一个webview。

一切正常,除非我尝试在输入字段之间切换是webview,焦点转到导航栏。

我假设我需要对响应者链做一些事情,但我无法弄清楚是什么。

有什么建议吗?

谢谢, 凯利

1 个答案:

答案 0 :(得分:12)

世界上可能没有其他人关心这一点,但我会在有人需要的时候回答这个问题。

正如我在评论中所提到的,我正在使用卡布奇诺框架而我实际上遇到了3个不同的问题。

让我在这里给你设置。

我正在创建一个嵌入了WebView的cocoa应用程序,并在其中加载一个带有cappuccino应用程序的页面。首先,字段之间的标签对任何网页上的任何表单都不起作用。

  1. 正如我在评论中所说,如果您使用的是IB,您可以将windows的“initialFirstResponder”设置为webview,并且至少“正常”表单可以正常工作。卡布奇诺仍然没有。
  2. 第二个问题是dom事件中的keyCode和charCode与cocoa中的WebView不同。事实证明,有一种叫做“键盘怪癖”的模式。如果你在寻找_needsKeyboardEventDisambiguationQuirks WebView ObjC类源 你会看到它为safari做了一个例外,将其关闭。它应该为旧版本的WebKit关闭它,但事实并非如此。见webkit bug 32694 要解决这个问题,我必须做两件事。 a)覆盖_needsKeyboardEventDisambiguationQuirks,使其返回NO b)如果在覆盖该方法时已经实例化了WebView,则还需要调用[[webviewinstance preferences] _postPreferencesChangesNotification]以使其正常工作。 然后,这使您的WebView像Safari一样发送DOM事件。

  3. 最后,卡布奇诺正在查看用户代理字符串以确定如何处理某些内容。它正在检查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"]
    
  4. 最后,一切都像在野生动物园中一样。

    希望这有助于某人!