ใน AppleScript มีวิธีใดที่จะใช้“ X ของทุกคน” เพื่อรับคุณสมบัติหลาย ๆ อย่างของแต่ละวัตถุเพื่อสร้างบันทึกหรือไม่?


1

เป็นไปได้ที่จะใช้สคริปต์:

tell application "Safari"
    set urls to URL of every tab of every window
end tell

เมื่อดำเนินการรับ URL ทั้งหมดของทุกแท็บของทุกหน้าต่าง (รายการสองมิติ)

Result:
 {{"http://domain1", "http://domain2", ...}, {"http://domain3", "http://domain4", ...}, {...}}

แต่มันเป็นไปได้ด้วย:

tell application "Safari"
    set (urls & name) to URL of every tab of every window
end tell

เพื่อรับบันทึกแทนรายการ:

Result:
 {{{url: "http://domain1", name: "domain1 - foo"}, {url: "http://domain2", name: "domain2 - bar2"}, {...}}, {{url: "http://domain3", name: "domain3 - foo3"}, {url: "http://domain4", name: "domain4 - bar4"}, {...}}}

เป็นไปได้หรือฉันควรใช้เท่านั้นrepeat?

คำตอบ:


2

เป็นไปไม่ได้ที่จะได้รับการบันทึกด้วยตัวระบุวัตถุเดียว แต่คุณสามารถรับรายการ:

tell application "Safari"
    {URL, name} of tabs of windows
end tell
-- {{{"http://url1", "title 1"}, {"http://url2", "title 2"}}}

สำหรับบันทึกคุณสามารถใช้วนซ้ำ:

set r to {}
tell application "Safari"
    repeat with t in tabs of windows
        set end of r to {|url|:URL of t, |name|:name of t}
    end repeat
end tell
r
-- {{|url|:"http://url1", |name|:"title 1"}, {|url|:"http://url2", |name|:"title 2"}}

ที่ดี! เป็นไปได้ทั้งหมดนี้ด้วย{|safari|: {{|window_1|: {|url|: "http://url1", |name|: "title 1"}, {|url|:"http://url2", |name|:"title 2"}},{|window_2|: {|url|: "http://url3", |name|: "title 3"}, {|url|:"http://url4", |name|:"title 4"}}}}หรือไม่ เพื่อให้ฉันสามารถแปลงบันทึกเป็น json (เช่นกับJSON Helper) และยังคงมีโครงสร้างหน้าต่างซาฟารี? ฉันเขียนสคริปต์เพื่อให้ทุกคนได้รับสตริง - เบส (ไม่ใช่การบันทึก - / ลิสต์ - เบส, สิ่งที่ฉันต้องการ) และมันเป็นโค้ดประมาณ 200 บรรทัดพร้อมรูทีนย่อย 3 ตัวและดูน่าเกลียดแม้กระทั่งสำหรับตัวเอง
คงที่

ถ้าฉันทดสอบอย่าง{|safari|: {|window1|: {{|url1|: "http1", |name1|: "title1"},{|url2|: "http2", |name2|: "title2"},{|url3|: "http3", |name3|: "title3"}}}} & {|safari|: {|window2|: {{|url1|: "http1", |name1|: "title1"},{|url2|: "http2", |name2|: "title2"},{|url3|: "http3", |name3|: "title3"}}}}นั้นมันจะคืนกลับมาเท่านั้น: {safari:{window1:{{url1:"http1", name1:"title1"}, {url2:"http2", name2:"title2"}, {url3:"http3", name3:"title3"}}}}ไม่ใช่ตัวแปรที่ผสานซึ่งมีรายการของwindows
แตติก

วงเล็บปีกกาคู่ (เช่นรายการ): {|safari|: -->{{<-- |window1|: ...ไม่มีการเปลี่ยนแปลงใด ๆ
คงที่

ขออภัยสำหรับความคิดเห็นนอกหัวข้อจำนวนมาก แต่ฉันเกือบจะแก้ไขได้ด้วยตัวเอง: วิธีการตั้งค่าคีย์ของบันทึกในรันไทม์? งั้นset end of w_l to {|window & "_" & window_i :t_l}เหรอ?
คงที่
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.