Modern JavaScript is a “safe” programming language. It does not provide low-level access to memory or the CPU, because it was originally created for browsers that do not require it.
The capabilities of JavaScript are highly dependent on the environment in which it runs. For example, Node.JS supports functions to read/write arbitrary files, perform network requests, etc.
Everything about manipulating web pages, interacting with the user and the web server is available to JavaScript in the browser.
For example, in the browser, JavaScript can:
Add new HTML code to a page, modify existing content, and modify styles.
Respond to user actions, mouse clicks, pointer movements, keystrokes.
Send network requests to remote servers, download and upload files (AJAX and COMET technologies).
Receive and set cookies, ask questions to the visitor, display messages.
Store data on the client side (“local storage”).
What can’t JavaScript do in a browser?
JavaScript in the browser is limited for the sake of the user’s security. The goal is to prevent an unscrupulous web page from accessing personal information or damaging user data.
Примеры таких ограничений включают в себя:
JavaScript на веб-странице не может читать/записывать произвольные файлы на жёстком диске, копировать их или запускать программы. Он не имеет прямого доступа к системным функциям ОС.
Современные браузеры позволяют ему работать с файлами, но с ограниченным доступом, и предоставляют его, только если пользователь выполняет определённые действия, такие как «перетаскивание» файла в окно браузера или его выбор с помощью тега .
Существуют способы взаимодействия с камерой/микрофоном и другими устройствами, но они требуют явного разрешения пользователя. Таким образом, страница с поддержкой JavaScript не может незаметно включить веб-камеру, наблюдать за происходящим и отправлять информацию в ФСБ.
Различные окна/вкладки не знают друг о друге. Иногда одно окно, используя JavaScript, открывает другое окно. Но даже в этом случае JavaScript с одной страницы не имеет доступа к другой, если они пришли с разных сайтов (с другого домена, протокола или порта).
Это называется «Политика одинакового источника» (Same Origin Policy). Чтобы обойти это ограничение, обе страницы должны согласиться с этим и содержать JavaScript-код, который специальным образом обменивается данными.
The JavaScript can easily communicate with the server from which the current page came. But its ability to receive data from other sites/domains is limited. Although it is possible in principle, which requires explicit consent (expressed in HTTP headers) from the remote party. Again, this is a security limitation.