【问题标题】:How do I redirect file:// URLs to a specific browser via Applescript?如何通过 Applescript 将 file:// URL 重定向到特定浏览器?
【发布时间】:2025-12-11 02:50:01
【问题描述】:

我有一个非常棒的小applescript(如下),它允许我在默认Fluid App 中打开链接。但是,它会分解为本地 URL:file:///

on open location this_URL

    if this_URL contains "drive.google.com" then
        tell application "/Applications/Fluids/Google Drive.app"
            activate
            open location this_URL
        end tell
    else if this_URL contains "mail.google.com" then
        tell application "/Applications/Fluids/Gmail.app"
            activate
            open location this_URL
        end tell
    else
        -- default browser here
        tell application "/Applications/Google Chrome.app"
            activate
            open location this_URL
        end tell

    end if

end open location

这里最大的缺点是 Dropbox 的上下文菜单共享链接依赖于这些本地文件,因此功能被破坏了。

如何更新它以同时重定向本地 URL?我在网上搜索了一下,好像没搞清楚。

编辑:更多信息

任何“file:///”的 URL 都会出现此问题。似乎“this_URL”不包括本地 URL,否则根据脚本中最后的“else”语句,谷歌浏览器应该打开它。发生的情况是 default_browser 脚本打开,然后关闭,然后重复 - 它再次打开/关闭。没有其他事情发生。 Dropbox 和其他应用程序使用 file:/// URL 来触发上下文菜单功能。我不需要对这些进行任何特殊处理 - 我只希望它们像任何其他 URL 一样使用 Google Chrome 打开。

注意:我试过下面的代码,但它不起作用。

if this_URL contains "file:///" then ...

【问题讨论】:

  • 我不使用 Google 驱动器,所以不完全理解您要解析的内容,但是,请执行您想要发送到包含“文件”的 Fluid 应用程序的任何 URL :///”?如果是这样,那是 Fluid 应用程序的限制,您最好在他们的论坛上提问。如果没有,您可以只捕获“file:///”,然后应该很容易让 Chrome 加载它。
  • 您能否提供有关保管箱问题的更多详细信息,似乎是问题所在?一个示例网址以及您在 Dropbox 和 Fluid 之间尝试实现的目标。
  • @adamh 用更多信息更新了上面的问题,希望有助于澄清问题。
  • @jweaks - 该脚本适用于流畅的应用程序 - 它正在捕获这些链接并为每个链接打开不同的“默认浏览器”。问题是最后一条语句“else ... google chrome” - 不适用于本地 URL。脚本启动,但随后什么也不做。

标签: url applescript local-files default-browser


【解决方案1】:

我理解您的意思是,只有默认浏览器部分因 file:/// URI 而失败。 如果是这样,您只需要确保它们以正确的格式发送到浏览器。文件结构格式应类似于:

file:///Users/MyHome/Desktop/My%20File.txt

放入显示对话框以检查 this_URL 并确保文件结构的格式正确。您可以在默认浏览器部分中捕获 file:/// URI,以便在需要时进行一些格式化,包括对必要的实体进行编码。我猜实体正在绊倒你,因为你没有收到错误而是空白页。您需要删除空格等内容。

else
    -- default browser here
    if this_URL contains "file:///" then set this_URL to formatURL(this_URL)
    tell application "/Applications/Google Chrome.app"
        activate
        open location this_URL
    end tell
end if

-- at end of script add this routine:
on formatURL(s)
    return (do shell script "/usr/bin/python -c 'import sys, urllib; print urllib.quote(sys.argv[1])' " & quoted form of s)
end

【讨论】: