Snow Leopard兼容性调整我在1月写的关于编写动态定位Safari或WebKit的AppleScripts

回到1月份我发布了这件作品关于如何编写动态定位Safari或WebKit的AppleScripts,具体取决于哪一个是您的默认(或哪个是当前活动的应用程序)。

它的两个部分在Snow Leopard中爆发我已经更新了原始条目中的代码,因此现在一切都可以在Snow Leopard和Mac OS X 10.5中使用但这两个变化都很有趣,所以我在这里解释一下。

首先是AppleScript的变化在我的原始版本中,我有以下几行:

如果_browser不是“Safari”或“WebKit”那么

This worked fine in Mac OS X 10.5, but when run in Mac OS X 10.6.1 (and 10.6.0), this line generates an error that the string “WebKit” can’t be made into a boolean我修改它来修改它:

如果(_浏览器不是“Safari”)和(_浏览器不是“WebKit”)那么

[更新,2009年9月16日: 感谢Michael Tsai,这是一个更好的组合比较的方法:

如果_browser不在{“Safari”,“WebKit”}那么

Tsai还指出我的原始语法尽管在10.5及更早版本上运行没有错误,但却没有按照我的想法行事10.6产生的错误实际上是正确的。]

第二是对Perl的改变在我的原始帖子中,我使用以下AppleScript例程来获取用户默认Web浏览器的名称:

on GetDefaultWebBrowser()
    set _scpt to "perl -MMac::InternetConfig -le " & ¬
        "'print +(GetICHelper \"http\")[1]'"
    return do shell script _scpt
end GetDefaultWebBrowser

这对Snow Leopard无效简而言之,Mac :: Carbon捆绑的Perl模块(其中Mac :: InternetConfig是其中一个)仅适用于32位模式,而Perl默认在Snow Leopard中以64位模式运行。

关键位是“默认”最终,Apple已经为Snow Leopard上的Perl和Python调用了一些严重的jiggery-pokery,默认情况下它们都以64位模式运行,同时仍然提供与32位二进制文​​件的完全向后兼容性和旧版本Perl和Python新的手册页对于Perl蟒蛇详细解释新系统,但要点是,不像以前版本的Mac OS X,Snow Leopard附带一些Perl和Python的版本:1

  • Perl 5.10(64位和32位)
  • Perl 5.8.9(仅限32位)
  • Python 2.6(64位和32位)
  • Python 2.5(仅限32位)

默认值 - 由...调用的内容在/ usr / bin中/ perl的在/ usr / bin中/蟒蛇- 是Perl 5.10和Python 2.6,都是64位模式调用不同版本的一种方法是设置环境变量在我们的情况下GetDefaultWebBrowser()AppleScript例程,我们想在32位模式下调用Perl 5.10:

on GetDefaultWebBrowser()
    set _scpt to "export VERSIONER_PERL_PREFER_32_BIT=yes; " & ¬
        "perl -MMac::InternetConfig -le " & ¬
        "'print +(GetICHelper \"http\")[1]'"
    return do shell script _scpt
end GetDefaultWebBrowser

而已该VERSIONER_PERL_PREFER_32_BIT环境变量对旧版本的Mac OS X没有影响,因此我们现在有一个此例程的版本,它返回Mac OS X 10.6和10.5上的默认Web浏览器的名称。


  1. Python手册页states that Python 3.0 is supported as well, but the system doesn’t ship with it. ↩︎