Sensor APIs - ÑÑо Ð½Ð°Ð±Ð¾Ñ Ð¸Ð½ÑеÑÑейÑов, поÑÑÑоеннÑÑ Ð¿Ð¾ обÑÐµÐ¼Ñ Ð´Ð¸Ð·Ð°Ð¹Ð½Ñ, коÑоÑÑе поÑледоваÑелÑно пÑедоÑÑавлÑÑÑ Ð´Ð¾ÑÑÑп к даÑÑикам ÑÑÑÑойÑÑв на веб-плаÑÑоÑме.
ÐонÑепÑии и иÑполÑзование Sensor APIsÐеÑмоÑÑÑ Ð½Ð° Ñо, ÑÑо ÑпеÑиÑикаÑÐ¸Ñ Generic Sensor API опÑеделÑÐµÑ Ð¸Ð½ÑеÑÑÐµÐ¹Ñ Sensor
, вам, как веб-ÑазÑабоÑÑикÑ, не пÑидÑÑÑÑ ÐµÐ³Ð¾ иÑполÑзоваÑÑ. ÐмеÑÑо него, Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ
Ñ ÐºÐ¾Ð½ÐºÑеÑнÑÑ
даÑÑиков, Ð²Ñ Ð±ÑдеÑе иÑполÑзоваÑÑ Ð¾Ð´Ð¸Ð½ из его подклаÑÑов. ÐапÑимеÑ, инÑеÑÑÐµÐ¹Ñ Accelerometer
возвÑаÑÐ°ÐµÑ ÑÑкоÑение пеÑемеÑÐµÐ½Ð¸Ñ ÑÑÑÑойÑÑва по вÑем ÑÑÑм оÑÑм на Ð¼Ð¾Ð¼ÐµÐ½Ñ ÐµÐ³Ð¾ ÑÑиÑÑваниÑ.
ÐаннÑе Ñ Ð´Ð°ÑÑиков могÑÑ ÑоÑно ÑооÑвеÑÑÑвоваÑÑ Ð´Ð°Ð½Ð½Ñм Ñ ÑизиÑеÑкиÑ
даÑÑиков ÑÑÑÑойÑÑва, либо не ÑооÑвеÑÑÑвоваÑÑ Ð¸Ð¼. ÐапÑимеÑ, инÑеÑÑÐµÐ¹Ñ Ð´Ð°ÑÑика Gyroscope
ÑоÑно ÑооÑвеÑÑÑвÑÐµÑ Ð¸Ð½ÑеÑÑейÑÑ ÑизиÑеÑкого даÑÑика. РкаÑеÑÑве алÑÑеÑнаÑивÑ, инÑеÑÑÐµÐ¹Ñ AbsoluteOrientationSensor
пÑедоÑÑавлÑÐµÑ Ð¸Ð½ÑоÑмаÑиÑ, коÑоÑÐ°Ñ Ð°Ð»Ð³Ð¾ÑиÑмиÑеÑки обÑединÑÐµÑ Ð´Ð°Ð½Ð½Ñе Ñ Ð´Ð²ÑÑ
и более даÑÑиков ÑÑÑÑойÑÑа. Ðва ÑÑи Ñипа даÑÑиков назÑваÑÑÑÑ Ð½Ð¸Ð·ÐºÐ¾ÑÑовневÑми и вÑÑокоÑÑовневÑми ÑооÑвеÑÑÑвенно. ÐÑоÑой Ñип Ñак же назÑваÑÑ Ð¾Ð±ÑединÑÑÑим даÑÑиком (либо, виÑÑÑалÑнÑм или, ÑинÑеÑиÑеÑким).
ÐнÑеÑÑейÑÑ Ð´Ð°ÑÑиков - ÑÑо ÑолÑко пÑокÑи Ð´Ð»Ñ Ð´Ð°ÑÑиков ÑÑÑÑойÑÑва. Ðак ÑледÑÑвие, задаÑа опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑи иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð°ÑÑиков гоÑаздо Ñложнее, Ñем Ð´Ð»Ñ Ð´ÑÑÐ³Ð¸Ñ API. ÐалиÑие API даÑÑика не знаÑиÑ, ÑÑо ÑÑÐ¾Ñ API подклÑÑен к ÑеалÑÐ½Ð¾Ð¼Ñ Ð°Ð¿Ð¿Ð°ÑаÑÐ½Ð¾Ð¼Ñ Ð´Ð°ÑÑикÑ, ÑабоÑÐ°ÐµÑ Ð»Ð¸ он, подклÑÑен или, даже, пÑедоÑÑавил ли полÑзоваÑÐµÐ»Ñ Ðº Ð½ÐµÐ¼Ñ Ð´Ð¾ÑÑÑп. ÐбеÑпеÑение поÑÑоÑнного доÑÑÑпа ко вÑей ÑÑой инÑоÑмаÑии пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº ÑÐ½Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¿ÑоизводиÑелÑноÑÑи и ÑазÑÑÐ´Ñ Ð±Ð°ÑаÑеи.
Таким обÑазом, опÑеделение возможноÑÑи иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ API даÑÑиков должно вклÑÑаÑÑ Ð¾Ð¿Ñеделение налиÑÐ¸Ñ Ñамого ÑÑого API и ÑÑÑаÑегии обоÑониÑелÑного пÑогÑаммиÑÐ¾Ð²Ð°Ð½Ð¸Ñ (Ñм. ниже).
ÐÑÐ¸Ð¼ÐµÑ Ð½Ð¸Ð¶Ðµ показÑÐ²Ð°ÐµÑ ÑÑи меÑода опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ API даÑÑика. ÐÑоме Ñого, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе обеÑнÑÑÑ Ñоздание ÑкземплÑÑа обÑекÑа в блок try...catch
. ÐбÑаÑиÑе внимание, ÑÑо опÑеделение ÑеÑез инÑеÑÑÐµÐ¹Ñ Navigator
не единÑÑвеннÑй возможнÑй пÑÑÑ.
if (typeof Gyroscope === "function") {
// бег по кÑÑгÑ...
}
if ("ProximitySensor" in window) {
// беÑегиÑÑ!
}
if (window.AmbientLightSensor) {
// погÑÑзиÑÑ Ð²Ð¾ ÑÑмÑ...
}
ÐбоÑониÑелÑное пÑогÑаммиÑование
Ðак Ñказано в Ñазделе ÐозможноÑÑÑ Ð¸ÑполÑзованиÑ, пÑовеÑиÑÑ Ð½Ð°Ð»Ð¸Ñие конкÑеÑного API даÑÑика недоÑÑаÑоÑно. ÐалиÑие ÑакÑиÑеÑкого даÑÑика Ñакже должно бÑÑÑ Ð¿Ð¾Ð´ÑвеÑждено. Ðак Ñаз здеÑÑ Ð¸ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ обоÑониÑелÑное пÑогÑаммиÑование. Ðно вклÑÑÐ°ÐµÑ ÑÑи ÑÑÑаÑегии.
ÐÑиведеннÑй ниже пÑÐ¸Ð¼ÐµÑ ÐºÐ¾Ð´Ð° иллÑÑÑÑиÑÑÐµÑ ÑÑи пÑинÑипÑ. Ðлок try...catch
Ð»Ð¾Ð²Ð¸Ñ Ð¾Ñибки, возникаÑÑие пÑи Ñоздании обÑекÑа даÑÑика. ÐÑÐ¾Ñ Ð¾Ð±ÑÐµÐºÑ ÑлÑÑÐ°ÐµÑ ÑобÑÑÐ¸Ñ error
, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð¹Ð¼Ð°ÑÑ Ð¾Ñибки, возникаÑÑие во вÑÐµÐ¼Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð°ÑÑика. ÐдинÑÑвеннÑй Ñаз, когда ÑÑо-либо показÑваеÑÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑ, ÑÑо когда необÑ
одимо запÑоÑиÑÑ ÑазÑеÑÐµÐ½Ð¸Ñ Ð¸ когда даÑÑик не поддеÑживаеÑÑÑ ÑÑÑÑойÑÑвом.
ÐÑимеÑание: ÐÑли ÑÑнкÑионалÑÐ½Ð°Ñ Ð¿Ð¾Ð»Ð¸Ñика блокиÑÑÐµÑ Ð¸ÑполÑзование ÑÑнкÑии, Ñо ÑÑо пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ð¿Ð¾ÑомÑ, ÑÑо Ð²Ð°Ñ ÐºÐ¾Ð´ не ÑооÑвеÑÑÑвÑÐµÑ Ð¿Ð¾Ð»Ð¸Ñикам, ÑÑÑановленнÑм на ваÑем ÑеÑвеÑе. ÐÑо не Ñо, ÑÑо когда-либо бÑÐ´ÐµÑ Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ð¾ полÑзоваÑелÑ. СÑаÑÑÑ Ð¾ HTTP заголовке Feature-Policy
ÑодеÑÐ¶Ð¸Ñ Ð¸Ð½ÑÑÑÑкÑÐ¸Ñ Ð¿Ð¾ ÑеализаÑии.
let accelerometer = null;
try {
accelerometer = new Accelerometer({ referenceFrame: "device" });
accelerometer.addEventListener("error", (event) => {
// ÐбÑабоÑÑик оÑибок вÑемени иÑполнениÑ.
if (event.error.name === "NotAllowedError") {
// ÐеÑеÑ
од к ÐºÐ¾Ð´Ñ Ð´Ð»Ñ Ð·Ð°Ð¿ÑоÑа ÑазÑеÑениÑ.
} else if (event.error.name === "NotReadableError") {
console.log("Ðе Ð¼Ð¾Ð³Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑиÑÑÑÑ Ðº даÑÑикÑ.");
}
});
accelerometer.addEventListener("reading", () => reloadOnShake(accelerometer));
accelerometer.start();
} catch (error) {
// ÐбÑабоÑÑик оÑибок ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¾Ð±ÑекÑа.
if (error.name === "SecurityError") {
// СмоÑÑи замеÑÐºÑ Ð¾ ÑÑнкÑионалÑнÑÑ
полиÑикаÑ
.
console.log(
"Создание ÑкземплÑÑа обÑекÑа даÑÑика бÑло задлокиÑовано по ÑÑнкÑионалÑнÑм полиÑикам.",
);
} else if (error.name === "ReferenceError") {
console.log("ÐаÑÑик не поддеÑживаеÑÑÑ Ð² User agent.");
} else {
throw error;
}
}
РазÑеÑÐµÐ½Ð¸Ñ Ð¸ ФÑнкÑионалÑнÑе ÐолиÑики
ÐÐ¾ÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð´Ð°ÑÑиков могÑÑ ÑнимаÑÑÑÑ ÑолÑко в Ñом ÑлÑÑае, еÑли полÑзоваÑÐµÐ»Ñ Ð´Ð°ÐµÑ ÑазÑеÑение на опÑеделеннÑй Ñип даÑÑика. СделаÑÑ ÑÑо можно иÑполÑзÑÑ Permissions API. ÐоÑоÑкий пÑимеÑ, показаннÑй ниже, запÑаÑÐ¸Ð²Ð°ÐµÑ Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ ÑазÑеÑение пеÑед попÑÑкой иÑполÑзоваÑÑ Ð´Ð°ÑÑик.
navigator.permissions.query({ name: "accelerometer" }).then((result) => {
if (result.state === "denied") {
console.log("ÐÑполÑзование даÑÑика не ÑазÑеÑено.");
return;
}
// ÐÑполÑзÑйÑе даÑÑик.
});
ÐлÑÑеÑнаÑивнÑй подÑ
од заклÑÑаеÑÑÑ Ð² попÑÑке иÑполÑзоваÑÑ Ð´Ð°ÑÑик и пÑоÑлÑÑивании SecurityError
.
const sensor = new AbsoluteOrientationSensor();
sensor.start();
sensor.addEventListener("error", (error) => {
if (event.error.name === "SecurityError")
console.log("ÐÐµÑ ÑазÑеÑÐµÐ½Ð¸Ñ Ð¸ÑполÑзоваÑÑ AbsoluteOrientationSensor.");
});
Ð ÑледÑÑÑей ÑаблиÑе Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ Ñипа даÑÑика опиÑано имÑ, ÑÑебÑемое Ð´Ð»Ñ Permissions API, аÑÑибÑÑ allow
ÑлеменÑа <iframe>
и диÑекÑива Feature-Policy
.
AbsoluteOrientationSensor
'accelerometer'
, 'gyroscope'
, и 'magnetometer'
Accelerometer
'accelerometer'
AmbientLightSensor
'ambient-light-sensor'
GravitySensor
'accelerometer'
Gyroscope
'gyroscope'
LinearAccelerationSensor
'accelerometer'
Magnetometer
'magnetometer'
RelativeOrientationSensor
'accelerometer'
, и 'gyroscope'
ÐоказаниÑ
ÐÐ¾ÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð´Ð°ÑÑиков пÑинимаÑÑÑÑ ÑеÑез ÑобÑÑие reading
, коÑоÑое ÑнаÑледовано Ð´Ð»Ñ Ð²ÑеÑ
Ñипов даÑÑиков. ЧаÑÑоÑа полÑÑÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ
завиÑÐ¸Ñ Ð¾Ñ Ð²Ð°Ñ Ð¸ ÑказÑваеÑÑÑ ÐºÐ°Ðº паÑамеÑÑ Ð¾Ð±ÑекÑа, пеÑеданного в конÑÑÑÑкÑÐ¾Ñ ÐºÐ»Ð°ÑÑа. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¾Ð¿ÑеделÑÐµÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво опÑоÑов даÑÑика в ÑекÑндÑ. Ðожно иÑполÑзоваÑÑ Ñелое или деÑÑÑиÑное ÑиÑло, поÑледнее Ð´Ð»Ñ ÑаÑÑÐ¾Ñ Ð¼ÐµÐ½ÐµÐµ ÑекÑндÑ. ФакÑиÑеÑÐºÐ°Ñ ÑаÑÑоÑа ÑÑиÑÑÐ²Ð°Ð½Ð¸Ñ Ð·Ð°Ð²Ð¸ÑÐ¸Ñ Ð¾Ñ Ð°Ð¿Ð¿Ð°ÑаÑного обеÑпеÑÐµÐ½Ð¸Ñ ÑÑÑÑойÑÑва и, ÑледоваÑелÑно, Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¼ÐµÐ½ÑÑе запÑоÑенной.
ÐÑÐ¸Ð¼ÐµÑ Ð½Ð¸Ð¶Ðµ иллÑÑÑÑиÑÑÐµÑ ÑÑо иÑполÑзÑÑ Magnetometer
.
let magSensor = new Magnetometer({ frequency: 60 });
magSensor.addEventListener("reading", (e) => {
console.log("ÐагниÑное поле Ð²Ð´Ð¾Ð»Ñ Ð¾Ñи X " + magSensor.x);
console.log("ÐагниÑное поле Ð²Ð´Ð¾Ð»Ñ Ð¾Ñи Y " + magSensor.y);
console.log("ÐагниÑное поле Ð²Ð´Ð¾Ð»Ñ Ð¾Ñи Z " + magSensor.z);
});
magSensor.addEventListener("error", (event) => {
console.log(event.error.name, event.error.message);
});
magSensor.start();
ÐнÑеÑÑейÑÑ
AbsoluteOrientationSensor
Secure context
ÐпиÑÑÐ²Ð°ÐµÑ ÑизиÑеÑкÑÑ Ð¾ÑиенÑаÑÐ¸Ñ ÑÑÑÑойÑÑва оÑноÑиÑелÑно ÑиÑÑÐµÐ¼Ñ ÐºÐ¾Ð¾ÑÐ´Ð¸Ð½Ð°Ñ Ðемли.
Accelerometer
Secure context
ÐоказÑÐ²Ð°ÐµÑ ÑÑкоÑение, пÑиложенное к ÑÑÑÑойÑÑÐ²Ñ Ð¿Ð¾ вÑем ÑÑÑм оÑÑм.
AmbientLightSensor
Secure context
ÐозвÑаÑÐ°ÐµÑ ÑекÑÑий ÑÑÐ¾Ð²ÐµÐ½Ñ Ð¾ÑвеÑенноÑÑи или оÑвеÑенноÑÑÑ Ð¾ÐºÑÑжаÑÑего оÑвеÑÐµÐ½Ð¸Ñ Ð²Ð¾ÐºÑÑг ÑÑÑÑойÑÑва.
GravitySensor
Secure context
ÐоказÑÐ²Ð°ÐµÑ ÑÐ¸Ð»Ñ ÑÑжеÑÑи, пÑиложеннÑÑ Ðº ÑÑÑÑойÑÑÐ²Ñ Ð¿Ð¾ вÑем ÑÑÑм оÑÑм.
Gyroscope
Secure context
ÐоказÑÐ²Ð°ÐµÑ ÑгловÑÑ ÑкоÑоÑÑÑ ÑÑÑÑойÑÑва по вÑем ÑÑÑм оÑÑм.
LinearAccelerationSensor
Secure context
ÐоказÑÐ²Ð°ÐµÑ ÑÑкоÑение, пÑиложенное к ÑÑÑÑойÑÑÐ²Ñ Ð¿Ð¾ вÑем ÑÑÑм оÑÑм, но без ÑÐ¸Ð»Ñ ÑÑжеÑÑи.
Magnetometer
Secure context
ÐÑедоÑÑавлÑÐµÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ магниÑном поле, обнаÑÑженном оÑновнÑм магниÑомеÑÑом ÑÑÑÑойÑÑва.
OrientationSensor
Secure context
ÐазовÑй клаÑÑ Ð´Ð»Ñ AbsoluteOrientationSensor
. ÐÑÐ¾Ñ ÐºÐ»Ð°ÑÑ Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¸ÑполÑзован Ñам по Ñебе, вмеÑÑо ÑÑого он пÑедоÑÑавлÑÐµÑ ÑвойÑÑва и меÑодÑ, к коÑоÑÑм обÑаÑаÑÑÑÑ Ð½Ð°ÑледÑемÑе Ð¾Ñ Ð½ÐµÐ³Ð¾ инÑеÑÑейÑÑ.
RelativeOrientationSensor
Secure context
ÐпиÑÑÐ²Ð°ÐµÑ ÑизиÑеÑкÑÑ Ð¾ÑиенÑаÑÐ¸Ñ ÑÑÑÑойÑÑва без ÑÑеÑа ÑиÑÑÐµÐ¼Ñ ÐºÐ¾Ð¾ÑÐ´Ð¸Ð½Ð°Ñ Ðемли.
Sensor
Secure context
ÐазовÑй клаÑÑ Ð´Ð»Ñ Ð²ÑÐµÑ Ð´ÑÑÐ³Ð¸Ñ Ð¸Ð½ÑеÑÑеÑов даÑÑиков. ÐÑÐ¾Ñ ÐºÐ»Ð°ÑÑ Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¸ÑполÑзован Ñам по Ñебе. ÐмеÑÑо ÑÑого он пÑедоÑÑавлÑÐµÑ ÑвойÑÑва, обÑабоÑÑики ÑобÑÑий и меÑодÑ, к коÑоÑÑм обÑаÑаÑÑÑÑ Ð¸Ð½ÑеÑÑейÑÑ, коÑоÑÑе наÑледÑÑÑÑÑ Ð¾Ñ Ð½ÐµÐ³Ð¾.
SensorErrorEvent
Secure context
ÐÑедоÑÑавлÑÐµÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾Ð± оÑибкаÑ
, вÑзваннÑÑ
Sensor
или ÑвÑзаннÑм инÑеÑÑейÑом.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4