最近的一个事:OS X Mavericks 发布和 WebKit?

大约 7 月中旬,我留意到了自己的两款 Mac 软件中涉及到 WebView 的部分相继出现了问题。具体是通过 WebView 执行 javascript 失效了。 可以执行 js 代码的方法来自 WebScriptObject 类。我尝试了各种不同的方法执行 js 代码,全部失效。包括 – callWebScriptMethod:withArguments: – evaluateWebScript: 等。

其实 09 年以前就研究 OS X WebKit Framework 了,虽然谈不上非常深入,但是应该如何调用,部署,什么方法执行应该得到什么结果还算比较清楚的。自己不同的软件里涉及到 WebView 的部分都出了问题,我立马意识到这个问题可能不是一个 bug 那么简单,因为之前软件这个部分执行从未遇到问题。这个不是新引入的系统 bug,因为功能失效前后,我的系统并没有更新过。这个问题不是个例,因为我的很多客户都向我报告了同样问题,而且开发群里也有人问到了相关问题。这让我感到,问题最可能出在 Apple 哪边。下面是我的一些简单猜测,并没有直接证据。

WebKit Framework 应该受到了系统远程配置的影响。苹果为配合 Mavericks 开发,对其服务器上的系统配置数据做了某些改动,而这个改动影响到了所有联网的 Mac 系统。导致所有用户机器上都无法在 WebView 内执行 js 代码。而且,回想我当年学习 WebKit 时候就经常在网上可以看到有人发这样的询问:

WebView evaluateWebScript not working?

也许真是因为远程配置的影响。而且这个远程系统配置数据,一旦update,就退不回去了,除非能找出到底修改了那个系统配置文件参数。另外一点就是,苹果的 WebKit 相关文档,是出了名的烂,非常不详细。可能苹果早有大改动 WebKit 的想法。

虽说有以上分析。不过我并没有代理、抓包、分析配置 tcp/ip 请求。如果哪位感兴趣可以试试。而且如果以上猜测是真的,那么对于网络条件不好(获取苹果远程系统配置信息有问题)的 Mac 开发者,在开发中很可能会碰到 WebView 和 js 的部分错误不断、问题诡异。

最后对于这个事情的出现。我推测 10.9 SDK 内的 WebKit 和 JSCore 可能变化较大,并发布比以往更详细的开发文档。而所有用了 WebView 和 JSCore 的 Mac 软件开发者需要留意并做好准备了。

PS:猜测归猜测,谁知道这个问题的内幕,务必告知。