Cách truy cập URL đã nhấp trong ứng dụng xử lý URL được tạo trong Automator


14

Tôi hiện đang cố gắng sửa đổi hành vi xử lý URL mặc định trong OS X. Tôi muốn, khi nhấp vào bất kỳ liên kết nào bên ngoài trình duyệt web, để sao chép URL này vào bảng điều khiển thay vì mở nó trong trình duyệt web mặc định - ví dụ: , nhấp vào liên kết trong cuộc hội thoại Skype sẽ sao chép URL này vào bảng điều khiển OS X thay vì mở nó trong Firefox (hiện là trình duyệt web mặc định của tôi).

Tôi đã nghĩ về các giải pháp, nhưng hiện tại tôi không thể thực hiện được. Nếu tôi có thể tạo một ứng dụng đặt URL vào bảng điều khiển được gửi đến nó và có thể đặt ứng dụng này làm trình duyệt web mặc định, tôi sẽ có thể đạt được mục tiêu của mình.

Tôi đã tạo một ứng dụng với Automator thực thi lệnh shell pbcopyvà đã đặt ứng dụng này làm trình duyệt web mặc định của mình, nhưng tôi không nhận được kết quả như mong đợi. Tôi đã thực hiện một số thử nghiệm và tôi có thể xác nhận rằng ứng dụng chạy khi nhấp vào liên kết, tuy nhiên, tôi không thể chuyển URL đến tập lệnh shell / shell. Tôi đã thử cả stdin hoặc một đối số được thông qua, nhưng không thành công.

Có cách nào để ứng dụng được tạo bằng Automator truy xuất URL đã nhấp và gửi nó tới pbcopy, khi ứng dụng đó được đặt làm trình xử lý (mặc định) cho URL không?

Ngoài ra, có cách nào tốt hơn để tạo một trình duyệt web giả mạo lấy đầu vào và đặt nó vào bảng so với Automator không? Hoặc có cách nào khác để tôi có thể đạt được mục tiêu của mình mà không cần một ứng dụng / tập lệnh tùy chỉnh không?


Không đặt câu trả lời này vì đây không phải là một giải pháp hoàn chỉnh, nhưng đó là một khởi đầu - Tôi đã sử dụng rubicode.com/Software/RCDefaultApp để đặt ứng dụng tự động làm trình duyệt mặc định. Trong Automator, có một hành động để Sao chép vào Clipboard. Tôi không thể nhận được bất kỳ kiểu nhập văn bản nào cho ứng dụng tự động.
chim cánh cụt

Ditto, nhưng tôi đã sử dụng Choosy. Tôi đã thực hiện một số lượng thử nghiệm khá lớn và tôi đã tìm thấy những điều sau đây: 1) Ứng dụng Automator chạy. 2) Dường như không nhận được bất kỳ loại đầu vào nào. 3) Ergo, khi một trình duyệt được gửi một "liên kết", nó không được gửi một URL trong bản rõ. Điều này phải được xử lý theo một số cách khác nhau, và đó thực sự là câu hỏi sau đó.
Timothy Mueller-Harder

Câu trả lời:


13

Cách mở URL trong Mac OS X thực sự phức tạp hơn bạn nghĩ. Khi bạn nhấp vào URL, Mac OS X không chỉ vượt qua trình duyệt mà URL sẽ mở; thay vào đó, nó sẽ gửi cho nó một Sự kiện của Apple, với ID kAEGetURL, có chứa URL.

Tôi chưa bao giờ thực sự sử dụng Automator (nó quá chậm và bị giới hạn cho việc sử dụng thông thường của tôi), vì vậy tôi không chắc về điều này, nhưng tôi nghi ngờ nó có khả năng xử lý các Sự kiện của Apple. Do đó, bạn sẽ không thể sử dụng Automator để đạt được những gì bạn muốn.

Do đó, bạn sẽ phải dùng đến một ứng dụng Objective-C bình thường trong Xcode.

Hai điều cơ bản bạn cần làm là:

  1. đăng ký ứng dụng của bạn để nhận sự kiện kAEGetURL và đặt CFBundleURLTypesInfo.plist trong ứng dụng của bạn để bao gồm httphttps.

  2. Thực hiện một phương thức xử lý sự kiện kAEGetURL và làm cho nó sao chép URL vào bảng tạm.

Hai điều này tương đối đơn giản để thực hiện trong Objective-C; để minh họa, tôi đã tạo một ứng dụng mẫu thực hiện điều này. Bạn có thể xem nó tại https://github.com/houbysoft/short/tree/master/Copy%20URL%20to%20Clipboard . Tệp quan trọng nhất là https://github.com/houbysoft/short/blob/master/Copy%20URL%20to%20Clipboard/Copy%20URL%20to%20Clipboard/AppDelegate.m , bạn có thể xem cách đăng ký sự kiện (điều này được thực hiện trong phương thức applicationWillFinishLaunching:) và cách sao chép nó vào bảng tạm (điều này được thực hiện trong phương thức getUrl: withReplyEvent:).

Nếu bạn cảm thấy lười biếng và chỉ muốn thấy nó hoạt động, hãy lấy tệp này , trích xuất ứng dụng từ nó, đặt nó làm trình duyệt web mặc định (mở Tùy chọn Safari và duyệt tìm ứng dụng đó trong trường Trình duyệt web mặc định). Sau đó nhấp vào liên kết của bạn trong Skype và nó sẽ được sao chép thẳng vào bảng tạm của bạn.


Cảm ơn về câu trả lời của bạn. Tôi không biết làm thế nào URL được tiến hành trong OSX. Tôi đã xem mã của bạn, nhưng tôi không biết Objective-C rất nhiều. Nhưng, ứng dụng kết quả của bạn hoạt động như một cơ duyên và đó là những gì tôi muốn ngay từ đầu. Cảm ơn một lần nữa!
DjDCH

Làm việc tốt trên ứng dụng (hãy). Tôi muốn tặng tiền thưởng, nhưng tôi thiếu một số thông tin dứt khoát về câu hỏi nếu Automator có thể (hoặc không thể) bị ép buộc thừa nhận sự kiện kAEGetURL để làm điều đó.
kopischke

@kopischke: Tôi vừa tìm kiếm trợ giúp Automator cho bất kỳ đề cập nào về các sự kiện của Apple và không tìm thấy gì. Tôi nghĩ thật công bằng khi cho rằng Automator không hỗ trợ điều này.
houbysoft

Có thể làm điều này với AppleScript, đây sẽ là cách "hợp lý" để mở rộng quy trình làm việc của Automator mà không cần đào sâu vào XCode / ObjC và biên dịch ứng dụng của riêng bạn. (không phải nó quá phức tạp, nhưng có khả năng AppleScript sẽ dễ dàng hơn.)
ocodo

Điều này dường như không hoạt động vào ngày 10.11. "/ Ứng dụng / Sao chép URL vào Clipboard.app không khả dụng dưới dạng trình duyệt HTTP"
TJ Luoma
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.