我正在尝试升级现有的答案
接受 URL 作为参数并打开一个新的 Firefox 窗口。
我可以用
open -a Firefox 'http://localhost:3000'
但它是在选项卡中打开的,而不是像希望的那样在新窗口中打开。
其中一个变化是
open -n -a Firefox 'http://localhost:3000'
这给了我标准错误
关闭 Firefox,已打开一个 Firefox 副本。一次只能打开一个 Firefox 副本
但是它会在我的默认浏览器 Safari 中打开该 URL。
我尝试了基于 open 手册页和 Mozilla 网站的各种选项,以便使用其产品打开 URL,但他们说这些信息已被弃用,可能不起作用。它对我来说不起作用,例如
/Applications/Firefox.app/Contents/MacOS/firefox -new-window "http://localhost:3000"
/Applications/Firefox.app/Contents/MacOS/firefox -remote "openURL(http://localhost:3000, new-window)"
两者都因上述常见错误而失败。
我尝试修改了之前链接中的脚本。我将其更新为以下内容。
# A function to be able to open up a new Firefox window if firefox is already
# running.
function firefox-window() {
/usr/bin/env osascript <<-EOF
on run argv
tell application "System Events"
if (name of processes) contains "Firefox" then
tell application "Firefox" to activate
keystroke "n" using command down
else
tell application "Firefox" to activate
end if
return "I am trying to open " & item 1 of argv & " in a new Firefox window."
(*
if & item 1 of argv &
return "I am the if you seek"
tell application "Firefox" OpenURL & item 1 of argv &
end if
*)
end tell
end run
EOF
}
我收到错误:
执行错误:无法将 {} 中的第 1 项转换为 Unicode 文本类型。(-1700)
我被困在那里。因此,我无法将 URL 作为参数放入 applescript 中。
好吧,我收到了许多其他错误,但是尽管出现了 UNICODE 错误之前的错误,原始脚本仍然运行。
~$ firefox-window 'http://localhost:3000'
2012-06-10 16:13:30.258 osascript[789:60f] Error loading /Library/ScriptingAdditions/Adobe Unit
Types.osax/Contents/MacOS/Adobe Unit Types: dlopen(/Library/ScriptingAdditions/Adobe Unit
Types.osax/Contents/MacOS/Adobe Unit Types, 262): no suitable image found. Did find:
/Library/ScriptingAdditions/Adobe Unit Types.osax/Contents/MacOS/Adobe Unit Types: no
matching architecture in universal wrapper
osascript: OpenScripting.framework - scripting addition "/Library/ScriptingAdditions/Adobe Unit
Types.osax" declares no loadable handlers.
294:300: execution error: Can’t make item 1 of {} into type Unicode text. (-1700)
我原本希望这可以很简单,但结果却让我头疼不已。我很奇怪为什么它不能用简单的 open 命令来工作,所以我只能用 shell 脚本来做。
如有任何帮助,让 Firefox 在向其传递 URL 时打开一个新窗口,我们将不胜感激。
答案1
笔记:以下内容适用于 OS X 10.7,但不适用于 10.8 – 请参阅这个问题。
打开AppleScript 编辑器.app并粘贴以下内容:
on run argv
tell application "System Events"
if (name of processes) contains "Firefox" then
tell application "Firefox" to activate
keystroke "n" using command down
delay 0.1 -- UI scripting delay
else
tell application "Firefox" to activate
delay 0.3 -- more delay
end if
keystroke "l" using command down
keystroke item 1 of argv
keystroke return
end tell
end run
在这里,我们要么使用 Cmd-N 打开一个新窗口,要么直接激活 Firefox。我添加了一个自定义延迟 — 这是必要的,因为 UI 操作具有固有的延迟,即使窗口尚未准备好,脚本也会继续输入。
最后,我们来看看keystroke
第一个参数,即item 1 of argv
。
将此文件保存在 下firefox-window.scpt
,例如在您的主文件夹中。然后修改 中的 shell 函数~/.bash_profile
:
function firefox-window() {
osascript ~/firefox-window.scpt "$1"
}
这会将第一个命令行参数传递$1
给 AppleScript,以便作为 来访问item 1 of argv
。
保存.bash_profile
并不要忘记重新启动终端或输入source ~/.bash_profile
。然后,只需使用以下命令运行命令:
firefox-window apple.com
firefox-window google.com
…等等。