Как общаться с внешним миром из расширения Safari?

Как я могу сообщить запущенному процессу, что контекстное меню было нажато в Safari?

Я читал, что это невозможно из-за безопасности, но это кажется неправильным, потому что 1Password каким-то образом извлекает всю информацию из базы данных настольного приложения в расширение Safari. Я написал расширение для отображения контекстного меню и пытался отправить запрос XMLRPC на локальный хост, но не смог заставить его работать.


person Sean DeNigris    schedule 25.08.2011    source источник
comment
я не могу поверить, что это невозможно! Я хотел сделать то же самое. Делать что-то способом 1password кажется немного экстремальным и рискованным для большого проекта...   -  person Brad G    schedule 13.09.2011
comment
отличный учебник по расширениям Safari здесь: arstechnica. ком/яблоко/2010/06/   -  person bear    schedule 28.03.2013


Ответы (2)


Я не уверен в этом, но я думаю, что 1Password делает то, что он делает, имея фоновый процесс (1PasswordAgent), постоянно опрашивающий определенные изменения в локальной базе данных расширения и/или файлах конфигурации. Например, чтобы изначально ввести ваши пароли в расширение, расширение может установить определенный флаг в своей базе данных localStorage, который будет записываться (сафари, а не расширением) в файл. Затем агент заметит флаг в файле и скопирует ваши пароли из основной базы данных 1Password в локальную базу данных расширения. Точно так же, когда расширение создает новую запись пароля, агент заметит изменение в базе данных расширения и отразит его в базе данных 1Password.

Возможно, вы могли бы сделать что-то подобное?

person chulster    schedule 25.08.2011
comment
Итак, вы говорите, что 1password имеет 2 приложения, редактирующие локальное хранилище (Safari и фоновый процесс)? Разве это не опасно? - person Brad G; 13.09.2011
comment
От developer.apple.com: не используйте пользовательские методы IPC для взаимодействия с собственными приложениями OS X. Если вашему расширению Safari необходимо взаимодействовать с вашим приложением OS X, используйте расширение сопутствующего приложения. Другие методы, такие как подключаемые модули NPAPI и веб-сокеты, не обеспечивают никакой защиты и могут быть перехвачены или изменены злоумышленниками. - person ZedTuX; 31.12.2017

Хотя я понятия не имею о реализации 1Password, LiveReload достигает того же, используя WebSocket для подключения к URL-адресу локального хоста (обрабатывается приложением). Если вы делаете это с глобальной страницы, междоменные ограничения не применяются, поэтому вы можете подключиться к любому URL-адресу:

var ws = new WebSocket("ws://localhost:98765");
...

(Однако будьте осторожны с этим локальным хостом, Chrome в Linux хочет 0.0.0.0 вместо 127.0.0.1 или localhost. По крайней мере, раньше он этого хотел.)

person Andrey Tarantsov    schedule 15.10.2011