我有一个 AppleScript,它创建一个新的 Safari 文档,然后使用重复循环在该窗口中打开多个 URL。我希望脚本继续使用同一个窗口,即使它不是最前面的窗口。
(问题是如果用户将焦点转移到另一个 Safari 窗口,此脚本将在最前面的窗口中打开 URL,而不是之前创建的窗口。)
如果可能的话,我想通过使用解决这个问题,window id
但需要一些关于脚本的帮助。
为此,我创建了以下内容,但我再次认为可能存在问题。我宁愿不使用 id,front window
因为用户可能会在不合时宜的时间更改前窗,并且脚本会提取错误的窗口 ID。
tell application "Safari"
make new document -- after this what if user changes focus
set win_ID to id of front window of application "Safari"
end tell
我宁愿使用类似的东西
set win_ID to window id of (make new document)
即使使用上述方法,我也无法通过使用它的窗口 ID 在窗口中打开 URL,并且还需要有关该脚本的帮助。
它的功能是这样的:
tell application "Safari"
open location "https://apple.com" in a new tab in window id xxxx
end tell
更新以解决使用以下问题的问题:
front window
以下示例 AppleScript 代码保证URL列表在目标窗口中打开,无论其在windows的z 顺序中的位置如何。
注意:根据需要滚动查看所有代码。
笔记:
更新后的AppleScript示例 代码包含一些错误处理,如果未创建tmp 文件(变量的值),则脚本会中止且不显示任何消息。这可以通过将语句转换为完整块并根据需要包括适当的或命令来更改,然后是命令。
tmpFileName
if not my writeToFile ...
if
display alert
display dialog
display notification
return
按照编码,这会
--> document "Untitled"
从make new document
无关项返回,因为使用包含的repeat
循环,它会等待HTML 文件被加载,并且可以通过文档中的标签定义的文档的实际名称进行查询,并确保z 顺序是无关的。<title>" & windowName & "</title>
编码的
repeat
循环被编写为等待HTML 文件加载最多 3 秒,并且应该有足够的时间。必要时进行调整。我选择放弃使用您的答案中使用的
do shell script
命令,但是,如果您更喜欢使用它,那么:代替:
和:
然后从代码部分中删除
on writeToFile(theData, theFile, overwriteExistingContent)
处理程序。-- # Handler #
此外,如果您更喜欢删除tmp 文件、变量值的
do shell script
命令,则:tmpFileName
代替:
和:
原始答案
以下示例 AppleScript 代码是一个示例,说明如何在Safari的同一窗口中打开URL列表,而不管其窗口顺序如何。
笔记:
open location
,因为它是Standard Additions的一部分,而不是Safari。使用该URL
属性设置文档或选项卡的URL。list
URL和列表中列表项( URL )的索引。make new document
,新文档成为Safarifront window
的。在命令之后立即获取。window id
front window
make new document
repeat
2
window id
make new document
@user3439894 我接受了你的回答——它很好地回答了这个问题。还有另一种方法 - 一种为 Safari 窗口创建 ID 的 hackie 方法。
这允许以下命令避免使用“前窗口”,以防在其余命令开始时创建的窗口不再是最前面的 - 值得怀疑,但可能。
我不确定在创建窗口时是否可以为新窗口提供除“无标题”之外的任何名称。
回复: