#javascript #cross-domain #security
#javascript #междоменный #Безопасность
Вопрос:
Как Javascript (запущенный с веб-сайта на удаленном сервере) может получать доступ к данным с локального компьютера пользователя? У меня есть доступ ко всем компьютерам пользователя, и все они используют Chrome. Данные могут храниться в файле, базе данных, я даже могу запустить веб-сервер на их компьютерах, если это необходимо, и т.д. Есть ли какой-либо способ для моих пользователей, например, разрешить моему веб-сайту получать доступ к данным из JavaScript? (возможно, есть настройка Chrome, но я все еще хочу, чтобы их браузер был безопасным)
Комментарии:
1. Вы можете распространять плагин Chrome или использовать Java-апплет.
2. Зачем вам для этого браузер? Поскольку вы говорите, что можете запускать сервер на их компьютере, я думаю, что это может быть лучшим выбором, поскольку у него намного больше разрешений. Если это потому, что вы хотите JavaScript, попробуйте Node.js .
Ответ №1:
Насколько я знаю, вы не можете получить доступ к файлам на компьютере пользователя с помощью javascript. Это было бы огромной дырой в безопасности. Вы должны написать клиентское (не веб) приложение (приложение для Windows или любую другую технологию, которую вы используете).
Комментарии:
1. @Matthew — Клиентские приложения могут взаимодействовать с удаленными серверами. Клиентское приложение на компьютере пользователя может отправлять любые данные с компьютера пользователя, которые оно хочет, на удаленный сервер.
2. @gilly3 Я понимаю, что ты имеешь в виду:) Но в этом случае JS (или что-то еще) в моем удаленном веб-приложении должен получить доступ к данным (сгенерированным другим приложением) с компьютера пользователя, чтобы выбрать элемент в выпадающем списке (это для колл-центра: как только клиент звонит, оператор получает на свой компьютер файл, содержащий идентификатор вызывающего абонента, и выпадающий список на веб-сайте должен обновляться в соответствии с идентификатором вызывающего абонента). Я посмотрю, сможет ли плагин Chrome помочь мне с этим, спасибо за вашу помощь!:)
Ответ №2:
это невозможно просто с помощью браузера, потому что, как вы сами сказали, это было бы небезопасно. Вы можете использовать какой-нибудь плагин, который должны разрешить ваши пользователи, который затем сможет получать доступ к локальным данным на компьютере.
Комментарии:
1. Вы знаете такой плагин или предлагаете мне его закодировать?
2. Возможно, я смогу что-то предложить, если вы скажете мне, к каким данным вы хотите получить доступ
3. Ну, точнее: «это невозможно, используя только собственный JavaScript страницы браузера» 🙂
4. Удаленный веб-сайт должен получать данные. Если я предоставлю им плагин Chrome, как этот плагин будет взаимодействовать с веб-сайтом? На самом деле плагин должен просто выбирать элемент в выпадающем списке на основе данных клиента. Возможно ли это?
Ответ №3:
Похоже, вы проявляете гибкость в отношении того, где данные хранятся на компьютере пользователя. В этом случае используйте localStorage или базы данных Web SQL. Базы данных Web SQL больше не являются частью спецификации HTML5, но они поддерживаются Chrome. Использование любого из этих методов сохранит данные на компьютере пользователя — фактически прямо в браузере.
Редактировать: В приложении, которое предоставляет данные идентификатора вызывающего абонента, запустите ваш веб-сайт с помощью Chrome, передающего аргумент querystring, содержащий необходимые данные идентификатора вызывающего абонента. Затем на вашей странице попросите его прослушать onstorage
событие и обновить выпадающий список, когда соответствующие данные localStorage изменились.
В вашем приложении идентификации вызывающего абонента вызовите:
%ChromeInstallPath%chrome.exe "http://foo.com/caller?Bill Gates@425-882-8080"
В вашем caller
обработчике используйте этот JavaScript:
window.onload = function() {
localStorage.callerId = location.search;
};
На вашей странице с выпадающим списком используйте этот JavaScript:
window.onstorage = function() {
setDropDownFromCallerId(localStorage.callerId);
};
Комментарии:
1. Извините, я не указал, что данные были созданы не удаленным веб-сайтом, а другим приложением.
2. @Matthew — Можете ли вы уточнить, каковы требования к хранению данных? Вы сказали «Данные могут храниться в файле, базе данных, я могу даже запустить веб-сервер на их компьютерах, если это необходимо, и т.д.». Вы можете запустить веб-сервер на клиентском компьютере, но вы не можете заполнить
localStorage
?3. Мне нужно больше прочитать о localStorage, но я думал, что это пространство на стороне клиента, к которому может получить доступ только веб-приложение. Другое программное обеспечение могло бы выполнять запись в это пространство, и оно было бы доступно через JS на моем веб-сайте? Я прочитаю об этом подробнее!! Спасибо!
4. @Matthew — Пусть ваше приложение для идентификации вызывающего абонента откроет Chrome и загрузит страницу на вашем сайте, которая изменяет
localStorage
. Затем прослушайтеwindow.onstorage
на своей странице, чтобы получать уведомления при изменении значения идентификатора вызывающего абонента. Я обновил свой ответ.
Ответ №4:
Что вы подразумеваете под доступом? нужно ли серверному коду получать дополнительную информацию во время обработки запроса?
Являются ли эти данные эксклюзивными для вашего приложения (то есть только вы их создаете, читаете, обновляете).
Если эти данные являются эксклюзивными для вашего приложения, то почему бы не сохранить их в локальном хранилище HTML 5