以编程方式访问网络浏览器选项卡 | Swift 3

3

是否可以访问Safari或Google Chrome的打开标签?可以获取URL或标签的标题,或者两者都可以?

该应用程序的目的是让用户指定一些网站并为它们添加标签,应用程序将测量在这些网站上花费了多少时间,该应用程序将通过可访问性获得授权。

1个回答

5

使用AppleScript获取每个选项卡的标题和URL。

在Swift中,您可以使用NSAppleScript运行AppleScript。

示例(Safari

let myAppleScript = "set r to \"\"\n" +
    "tell application \"Safari\"\n" +
    "repeat with w in windows\n" +
    "if exists current tab of w then\n" +
    "repeat with t in tabs of w\n" +
    "tell t to set r to r & \"Title : \" & name & \", URL : \" & URL & linefeed\n" +
    "end repeat\n" +
    "end if\n" +
    "end repeat\n" +
    "end tell\n" +
"return r"

var error: NSDictionary?
let scriptObject = NSAppleScript(source: myAppleScript)
if let output: NSAppleEventDescriptor = scriptObject?.executeAndReturnError(&error) {
    let titlesAndURLs = output.stringValue!
    print(titlesAndURLs)
} else if (error != nil) {
    print("error: \(error)")
}

AppleScript 返回一个字符串,例如:

Title : the title of the first tab, URL : the url of the first tab
Title : the title of the second tab, URL : the url of the second tab
Title : the title of the third tab, URL : the url of the third tab
....

一个例子(谷歌浏览器

let myAppleScript = "set r to \"\"\n" +
    "tell application \"Google Chrome\"\n" +
    "repeat with w in windows\n" +
    "repeat with t in tabs of w\n" +
    "tell t to set r to r & \"Title : \" & title & \", URL : \" & URL & linefeed\n" +
    "end repeat\n" +
    "end repeat\n" +
    "end tell\n" +
"return r"
var error: NSDictionary?
let scriptObject = NSAppleScript(source: myAppleScript)
if let output: NSAppleEventDescriptor = scriptObject?.executeAndReturnError(&error) {
    let titlesAndURLs = output.stringValue!
    print(titlesAndURLs)
} else if (error != nil) {
    print("error: \(error)")
}

更新:

这是带有注释的AppleScript脚本。

您可以在“脚本编辑器”应用程序中运行它。

set r to "" -- an empty variable for appending a string
tell application "Safari"
    repeat with w in windows -- loop for each window, w is a variable which contain the window object
        if exists current tab of w then --  is a valid browser window
            repeat with t in tabs of w -- loop for each tab of this window, , t is a variable which contain the tab object
                -- get the title (name) of this tab and get the url of this tab
                tell t to set r to r & "Title : " & name & ", URL : " & URL & linefeed -- append a line to the variable (r)
                (*
                 'linefeed'  mean a line break
                 'tell t' mean a tab of w (window)
                 '&'  is for  concatenate strings, same as the + operator in Swift
                *)
            end repeat
        end if
    end repeat
end tell
return r -- return the string (each line contains a title and an URL)

这太棒了!您介意给我一点解释代码的说明,哪个部分做什么...? - user6879072
我在我的回答中添加了解释。 - jackjr300

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接