如何将Cocoa-Applescript应用程序注册为URL处理程序? (相当于Applescript Studio中的“on open location”)

时间:2013-01-30 16:28:05

标签: cocoa applescript applescript-objc

应该相对简单,但我似乎无法找到任何内容 - 我正在尝试向Cocoa-Applescript应用程序添加URL处理程序,如下所述: http://www.macosxautomation.com/applescript/linktrigger/index.html

除了该示例似乎在Xcode / Cocoa-Applescript应用程序中不起作用。

在我的AppDelegate.applescript中,在applicationDidFinishLaunching_之后我得到了:

 on open location this_URL
   tell me to log "this_URL: " & this_URL
 end open location

我在info.plist中添加了所有CFBundleURLTypes / CFBundleURLschemes内容。

后者似乎正常工作,因为当我点击myAppScheme://链接时我的应用激活了。

但日志声明不会触发。

我也试过像on handleGetURLEvent_(this_URL)这样的东西,但我只是在猜这一点:)

任何帮助都非常感谢..

3 个答案:

答案 0 :(得分:3)

解决! (下面的“幻数”是由ASObjc中的错误引起的。)

  on applicationDidFinishLaunching_(aNotification)
  -- Insert code here to initialize your application before any files are opened
      -- Register the URL Handler stuff
      tell current application's NSAppleEventManager's sharedAppleEventManager() to setEventHandler_andSelector_forEventClass_andEventID_(me, "handleGetURLEvent:", current application's kInternetEventClass, current application's kAEGetURL)

  -- all your other application startup stuff..

  end applicationDidFinishLaunching_


  -- handler that runs when the URL is clicked
  on handleGetURLEvent_(ev)
      set urlString to (ev's paramDescriptorForKeyword_(7.57935405E+8)) as string
      tell me to log "urlString: " & urlString

      -- do stuff with 'Set AppleScript's text item delimiters to "foo="', and then "&" etc, to parse your parameters out of the URL String

  end handleGetURLEvent_

你的info.plist需要采用以下形式:

 <key>CFBundleIdentifier</key>
  <string>com.myappname</string>
...
  <key>CFBundleURLTypes</key>
<array>
  <dict>
  <key>CFBundleURLName</key>
  <string>My App Name Helper</string>
  <key>CFBundleURLSchemes</key>
  <array>
  <string>myappscheme</string>
  </array>
  </dict>
</array>

这允许您的应用从以下格式的网址中获取输入:

myappscheme://com.myappname/?foo = stuff&amp; bar = otherstuff

整个网址都会传入,并以“urlString”变量结束,因此您可以根据需要对其进行解析。这意味着你甚至不必像我上面那样遵循标准的网址约定,但是你可能会觉得这样做很方便,所以你可以支持解析让我们说你的应用程序中的Facebook或谷歌地图网址很简单将http://更改为myappscheme://

享受/希望有帮助......:)

答案 1 :(得分:0)

我不使用ApplescriptObjC,但在正常的cocoa应用程序中,请参阅this post,其中说明了如何执行此操作。我想你需要这样做。

答案 2 :(得分:0)

我可能遇到类似的事情。我有一个Applescript URL处理程序启动但不处理传递的URL(正如您所描述的那样)。

我发现当另一个程序发送链接时,一切都正常运行 当我尝试通过终端“open”命令手动发送链接时,“on run”处理程序触发而不是“on open location” - 这很遗憾意味着我无法获取传递的URL。