如何在我的 WKWebView 中关闭 OS X 的智能引号替换?

How can I turn off OS X's Smart Quotes replacement in my WKWebView?

我正在开发一个包含 WKWebView 的 Mac 应用程序。 Web 视图中的 HTML 包含一个 input 字段,用户可以在其中键入代码(实际上是 Ruby)。当我在这个字段中输入引号 (") 时,它会自动变成花哨的大引号 (")。因为 Ruby 字符串使用 ASCII 引号作为分隔符,所以这是错误的。

目前我正在获取用户输入的内容,并在使用代码之前将弯引号替换为 ASCII 引号,但显然这并不理想。

我不知道如何禁用此 OS X 功能。显然,用户可以在全局级别的系统偏好设置中执行此操作,但我只想在我的应用程序中将其关闭。

WKWebView、应用程序包本身或其他地方是否有一些配置可以关闭此功能?是否有 HTML 或 CSS 选项?我应该使用不同类型的 HTML 输入字段吗?基本上我可以在整个堆栈的哪个位置进行干预以关闭此功能?

如果您正在使用 Xcode 的 Interface Builder,请选择 textfield/textbox 打开实用工具。在 'Attributes Inspector' 下,您可以将 键盘类型 设置为 ASCII。

要以编程方式执行此操作,请查看 this 之前的问题和答案。

当您在系统偏好设置中切换设置(键盘 > 文本 > 使用智能引号和破折号)时,它会在用户的全局偏好设置域中为键 NSAutomaticQuoteSubstitutionEnabled 设置一个值。我通过比较 defaults read -g 之前和之后的输出来确定这一点。

您可以尝试在应用程序启动的早期将您的应用程序域设置为 false,看看是否会为您的应用程序禁用它:

[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"NSAutomaticQuoteSubstitutionEnabled"];

-applicationWillFinishLaunching: 甚至 main() 中尝试。

当然,如果可行,它将在您的整个应用程序中禁用它,而不仅仅是您的 WKWebView

在对网络视图中的 <textarea> 进行一些实验后,我发现 smart/fancy 引号替换将通过添加 spellcheck 属性来禁用。

<textarea spellcheck="false" ...>

据我所知(在撰写本文时)没有在任何地方记录并且 MDN currently makes no mention of spellcheck attribute "auto correcting" quotes。我想 autocorrectautocapitalize 会这样做,但在网络视图的上下文中设置这些显然不会做任何事情。

因为我当时正在开发 React 应用程序,所以属性是驼峰式的,在那种情况下它是 <textarea spellCheck="false" ...>