#macos #google-chrome #safari #swift3 #macos-sierra
#macos #google-chrome #safari #swift3 #macos-sierra
Вопрос:
Можно ли получить доступ к открытым вкладкам Safari или Google Chrome? Подойдет URL-адрес или заголовок вкладки или оба?
Цель приложения затем пользователь может указать некоторые веб-сайты и добавить к ним ярлыки, и приложение будет измерять, сколько тратится на эти веб-сайты, приложение будет разрешено через доступность.
Ответ №1:
Используйте AppleScript для получения заголовка и URL-адреса каждой вкладки.
Вы можете использовать NSAppleScript
в Swift для запуска AppleScript.
Пример (Safari)
let myAppleScript = "set r to ""n"
"tell application "Safari"n"
"repeat with w in windowsn"
"if exists current tab of w thenn"
"repeat with t in tabs of wn"
"tell t to set r to r amp; "Title : " amp; name amp; ", URL : " amp; URL amp; linefeedn"
"end repeatn"
"end ifn"
"end repeatn"
"end telln"
"return r"
var error: NSDictionary?
let scriptObject = NSAppleScript(source: myAppleScript)
if let output: NSAppleEventDescriptor = scriptObject?.executeAndReturnError(amp;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 ....
Пример (Google Chrome)
let myAppleScript = "set r to ""n"
"tell application "Google Chrome"n"
"repeat with w in windowsn"
"repeat with t in tabs of wn"
"tell t to set r to r amp; "Title : " amp; title amp; ", URL : " amp; URL amp; linefeedn"
"end repeatn"
"end repeatn"
"end telln"
"return r"
var error: NSDictionary?
let scriptObject = NSAppleScript(source: myAppleScript)
if let output: NSAppleEventDescriptor = scriptObject?.executeAndReturnError(amp;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 amp; "Title : " amp; name amp; ", URL : " amp; URL amp; linefeed -- append a line to the variable (r)
(*
'linefeed' mean a line break
'tell t' mean a tab of w (window)
'amp;' 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)
Комментарии:
1. Это здорово! Не могли бы вы дать мне небольшое объяснение кода, какая часть делает то, что …?
2. Я добавляю объяснения в свой ответ