自定义协议处理程序不在OSX上传递参数

时间:2010-10-17 14:54:04

标签: java macos firefox scala google-chrome

我正在尝试将自定义协议处理程序连接到OSX上的应用程序,以便我可以执行test://参数

在我的plist中,我有以下内容:

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleTypeRole</key>
        <string>Viewer</string>
        <key>CFBundleURLIconFile</key>
        <string></string>
        <key>CFBundleURLName</key>
        <string>test</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>test</string>
        </array>
    </dict>
</array>

这成功启动了应用程序,但我的参数列表始终为空。为什么是这样?

在封面下启动Java \ Scala应用程序,主要方法是: 对象LoadJS {   def main(args:Array [String]){

我可以在命令行上使用“open”命令时传入参数。从Chrome和Firefox都可以尝试,但都可以使用。

有什么想法吗?

由于

1 个答案:

答案 0 :(得分:2)

URL不作为参数传递。相反,您的应用程序已启动,然后会收到类kInternetEventClass和ID kAEGetURL的AppleEvent。也许这篇文章描述了如何使用Objective C中自己的协议,可以帮助理解它的工作原理:

How do you set your Cocoa application as the default web browser?

为了从Java / Scala实际处理此事件,您需要进行更多研究并编写本机代码...查看Apple's ApplicationAdapter类,它允许您处理一些基本的AppleEvent,如open,重新开放,等等;但不幸的是,不是与URL相关的事件。在this forum,有人报告使用JNI进行此操作。