swift - 如何获取 Safari 中每个窗口的每个选项卡中所有打开的 URL?

标签 swift macos cocoa safari applescript

我正在使用 NSAppleScript 告诉 Safari 返回所有打开的选项卡的 URL,如下所示:

let script = NSAppleScript.init(source: "tell application \"Safari\" to get URL of every tab of every window")
var errorInfo: NSDictionary?
let eventDescriptor:NSAppleEventDescriptor = (script?.executeAndReturnError(&errorInfo))!
print(eventDescriptor.stringValue)

以上返回零。告诉返回当前 URL 确实有效。

"tell application \"Safari\" to return URL of front document as string"
<小时/>

如何获取每个窗口的每个选项卡中所有打开的 URL?

最佳答案

结果将是一个表示字符串列表列表的 NSDescriptor。你要么:

  1. 在返回之前,使用合适的文本项分隔符将列表强制转换为 AppleScript 中的字符串,然后您可以将字符串拆分为 Swift 中的字符串列表(作弊),
  2. 使用几个嵌套循环自行解压列表描述符(乏味),或者
  3. 放弃 NSAppleScript 并使用 AppleScript-ObjC bridge相反(设置起来有点繁琐,但迄今为止最简单且最容易使用)。

关于swift - 如何获取 Safari 中每个窗口的每个选项卡中所有打开的 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39327081/

相关文章:

ios - 如何知道标签是否被点击

ios - 带有变量 Swift 的 NSLocalizedString

objective-c - 为 ARC 做好准备 - 最佳策略?

objective-c - NSSpeechSynthesizer 和轨道持续时间

xcode - 无法更改工作表上的文本标签

cocoa - 从 NSTextView 中提取第一个非空白行的最有效方法?

ios - self.definesPresentationContext = true : leads to black screen?

ios - 尝试添加图层蒙版时 UIImage 消失

macos - xcodebuild测试,无需构建。如何从命令行覆盖测试运行参数

macos - 如果应用程序是 UIElement,我是否需要帮助程序将我的应用程序注册为登录项