【问题标题】:Access web browser tabs programmatically | Swift 3以编程方式访问 Web 浏览器选项卡 |斯威夫特 3
【发布时间】:2023-04-06 15:25:01
【问题描述】:

是否可以访问 Safari 或 Google Chrome 的打开标签页? URL 会是好的还是标签的标题或两者兼而有之?

应用程序的用途,然后用户可以指定一些网站并为其添加标签,应用程序将衡量在这些网站上花费了多少,通过可访问性允许应用程序。

【问题讨论】:

    标签: macos google-chrome safari swift3 macos-sierra


    【解决方案1】:

    使用 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)")
    }
    

    更新:

    这是带有 cmets 的 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)
    

    【讨论】:

    • 这太棒了!你介意给我一些代码的解释,哪一部分做什么......?
    • 我在回答中添加了解释
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    • 2017-02-15
    • 1970-01-01
    • 2017-07-22
    • 1970-01-01
    相关资源
    最近更新 更多