Applescript在OS X Firefox上打开.url文件

时间:2009-10-15 21:45:43

标签: macos url applescript

由于只有开发人员可以理解的原因,Firefox将在Windows上创建和打开.url文件,在OS X上创建.webloc文件,但不允许Windows版本的Firefox打开.webloc文件或OS X版本Firefox打开.url文件。 (.url文件在Safari中打开但是由于不值得进入这里的原因而不够好。)作为我在任一系统上使用任一文件类型的努力的一部分,我正在编写一个AppleScript来打开OS上的.url文件X Firefox。

on open the_droppings
    set filePath to the_droppings

    set fp to open for access filePath
    set fileContents to read fp
    close access fp

    set secondLine to paragraph 2 of fileContents

    set tid to AppleScript's text item delimiters
    set AppleScript's text item delimiters to "="
    set URLstring to last text item of secondLine
    set AppleScript's text item delimiters to tid

    tell application "Firefox"
        activate
        OpenURL URLstring
    end tell
end open

我认为这会有效但是在第3行到最后一行它说“预期的行尾等,但找到了标识符。”这是为什么?

编辑以下sakra的回答大多有效,但在包含“=”的网址上中断,例如:http://example.com?foo=a&bar=z

3 个答案:

答案 0 :(得分:2)

Firefox似乎根本没有AppleScript字典。因此,OpenURL语句中的术语tell app "Firefox"被解释为AppleScript标识符,而不是AppleScript命令。连续两个AppleScript标识符会导致语法错误。

作为解决方法,您可以将shell命令open与标准AppleScript命令do shell script结合使用:

on open the_droppings

    set filePath to the_droppings

    set fileContents to read filePath

    set theOffset to offset of "URL=" in fileContents
    set URLstring to text (theOffset + 4) through -1 of fileContents

    do shell script "/usr/bin/open -a Firefox.app " & quoted form of URLstring
end open

答案 1 :(得分:0)

编辑:在这里的应用程序中下载我的脚本:http://www.mediafire.com/?v77bv9gl9e7oj40

这样做效果更好:

on open the_droppings
    set filePath to the_droppings
    set fileContents to read filePath

    set theOffsetA to offset of "URL=" in fileContents
    set theOffsetB to offset of "IDList=" in fileContents
    set URLstring to text (theOffsetA + 4) through (theOffsetB - 3) of fileContents

    do shell script "/usr/bin/open -a Firefox.app " & quoted form of URLstring
end open

它读取URL =行到下一行(IDList)减3步(忽略\ r \ n)并将其发送到firefox。对我来说就像一个魅力。 然而,我看到了具有奇怪布局的url文件(例如:http://forums.mozillazine.org/viewtopic.php?p=2619487),我不确定它是否可以在那里工作。但我检查了很多我的url文件,他们没有那个,所以至少它对我来说很好。如果你遇到这个剧本的麻烦,请告诉我。目前我将其设置为打开URL文件的默认应用程序,而不是Safari!

为了能够使用applescript文件打开url文件,需要在其plist中设置正确的doctypes和标识符,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CFBundleAllowMixedLocalizations</key>
    <true/>
    <key>CFBundleDevelopmentRegion</key>
    <string>English</string>
    <key>CFBundleDocumentTypes</key>
    <array>
        <dict>
            <key>CFBundleTypeExtensions</key>
            <array>
                <string>url</string>
            </array>
            <key>CFBundleTypeIconFile</key>
            <string>document.icns</string>
            <key>CFBundleTypeName</key>
            <string>URL File</string>
            <key>CFBundleTypeOSTypes</key>
            <array>
                <string>URL</string>
            </array>
            <key>CFBundleTypeRole</key>
            <string>Viewer</string>
        </dict>
    </array>
    <key>CFBundleExecutable</key>
    <string>droplet</string>
    <key>CFBundleIdentifier</key>
    <string>filehandler.url.mozilla.firefox</string>
    <key>CFBundleIconFile</key>
    <string>droplet</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleName</key>
    <string>FirefoxURLHandler</string>
    <key>CFBundlePackageType</key>
    <string>APPL</string>
    <key>CFBundleSignature</key>
    <string>dplt</string>
    <key>LSMinimumSystemVersionByArchitecture</key>
    <dict>
        <key>x86_64</key>
        <string>10.6</string>
    </dict>
</dict>
</plist>

答案 2 :(得分:-1)

我知道这不是苹果脚本,但我这样做是为了在 Linux 上打开它们,但它有一个问题,如果终端关闭,它会杀死浏览器。我打开这个另外一个问题,但是这可能会有帮助。

#!/bin/bash
#bash -c "cat $1 | grep URL | cut -d'=' -f2 | xargs firefox &"
echo OpenWinURL in firefox
echo Closing this window will close your firefox.
echo Try opening firefox before opening a OpenWinURL
#echo Copyright 2021 Aaron Peterson GPL V2 or later
#echo  The ampersand doesn't work after firefox
#echo "$1"
#
jobs -l
cat "$1" | grep  -m 1 URL= | cut -d'=' -f2- | xargs -0 -i firefox {} #&
jobs -l
disown -h -a
jobs -l
#read  -n 1 -p "Input Selection:" mainmenuinput

#echo testing
#wait 1000

#
#| head -n 1
#| cut -d'=' -f2 | xargs firefox &