डिवाइस पर मौजूद सेंसर, जैसे कि एक्सलरोमीटर, जाइरोस्कोप, और मैग्नेटोमीटर का ऐक्सेस पाने के लिए, Generic Sensor API का इस्तेमाल करें.
आजकल, सेंसर के डेटा का इस्तेमाल प्लैटफ़ॉर्म के हिसाब से बनाए गए कई ऐप्लिकेशन में किया जाता है. इससे इमर्सिव गेमिंग, फ़िटनेस ट्रैकिंग, ऑगमेंटेड रिएलिटी या वर्चुअल रिएलिटी जैसी सुविधाएं मिलती हैं. क्या प्लैटफ़ॉर्म के हिसाब से बनाए गए ऐप्लिकेशन और वेब ऐप्लिकेशन के बीच के अंतर को कम करना अच्छा नहीं होगा? वेब के लिए, Generic Sensor API का इस्तेमाल करें!
Generic Sensor API क्या है?
Generic Sensor API, इंटरफ़ेस का एक सेट है. यह वेब प्लैटफ़ॉर्म को सेंसर डिवाइसों के बारे में जानकारी देता है. एपीआई में बेस Sensor इंटरफ़ेस और इसके ऊपर बनाए गए सेंसर क्लास का सेट शामिल होता है. बेस इंटरफ़ेस होने से, कॉन्क्रीट सेंसर क्लास के लिए लागू करने और स्पेसिफ़िकेशन की प्रोसेस आसान हो जाती है. उदाहरण के लिए, Gyroscope क्लास देखें. यह बहुत छोटा है! मुख्य फ़ंक्शन, बेस इंटरफ़ेस से तय होता है. साथ ही, Gyroscope इसे सिर्फ़ तीन एट्रिब्यूट के साथ बढ़ाता है. ये एट्रिब्यूट, कोणीय वेग को दिखाते हैं.
कुछ सेंसर क्लास, असल हार्डवेयर सेंसर के साथ इंटरफ़ेस करती हैं. जैसे, एक्सलरोमीटर या जाइरोस्कोप क्लास. इन्हें लो-लेवल सेंसर कहा जाता है. अन्य सेंसर को फ़्यूज़न सेंसर कहा जाता है. ये कई लो लेवल सेंसर से डेटा को मर्ज करते हैं, ताकि स्क्रिप्ट को जानकारी मिल सके. स्क्रिप्ट को यह जानकारी खुद से कैलकुलेट करनी पड़ती है. उदाहरण के लिए, AbsoluteOrientation सेंसर, एक्सलरोमीटर, जाइरोस्कोप, और मैग्नेटोमीटर से मिले डेटा के आधार पर, इस्तेमाल के लिए तैयार चार-बाय-चार रोटेशन मैट्रिक्स उपलब्ध कराता है.
आपको लग सकता है कि वेब प्लैटफ़ॉर्म पहले से ही सेंसर डेटा उपलब्ध कराता है. आप बिल्कुल सही हैं! उदाहरण के लिए, DeviceMotion और DeviceOrientation इवेंट, मोशन सेंसर का डेटा दिखाते हैं. इसलिए, हमें नए एपीआई की ज़रूरत क्यों है?
मौजूदा इंटरफ़ेस की तुलना में, Generic Sensor API के कई फ़ायदे हैं:
- Generic Sensor API एक सेंसर फ़्रेमवर्क है. इसे नई सेंसर क्लास के साथ आसानी से बढ़ाया जा सकता है. साथ ही, इनमें से हर क्लास में सामान्य इंटरफ़ेस रहेगा. एक सेंसर टाइप के लिए लिखा गया क्लाइंट कोड, बहुत कम बदलावों के साथ दूसरे सेंसर टाइप के लिए फिर से इस्तेमाल किया जा सकता है!
- सेंसर को कॉन्फ़िगर किया जा सकता है. उदाहरण के लिए, अपने ऐप्लिकेशन की ज़रूरतों के हिसाब से सैंपलिंग फ़्रीक्वेंसी सेट की जा सकती है.
- यह पता लगाया जा सकता है कि प्लैटफ़ॉर्म पर कोई सेंसर उपलब्ध है या नहीं.
- सेंसर की रीडिंग में सटीक टाइमस्टैंप होते हैं. इससे आपके ऐप्लिकेशन में अन्य गतिविधियों के साथ बेहतर तरीके से सिंक किया जा सकता है.
- सेंसर डेटा मॉडल और कोऑर्डिनेट सिस्टम को साफ़ तौर पर तय किया गया है. इससे ब्राउज़र बनाने वाली कंपनियां, एक साथ काम करने वाले समाधानों को लागू कर सकती हैं.
- जेनेरिक सेंसर पर आधारित इंटरफ़ेस, डीओएम से बंधे नहीं होते. इसका मतलब है कि वे न तो
navigatorऔर न हीwindowऑब्जेक्ट होते हैं. इससे, आने वाले समय में सर्विस वर्कर में एपीआई का इस्तेमाल करने या इसे हेडलेस JavaScript रनटाइम में लागू करने के अवसर मिलते हैं. जैसे, एम्बेड किए गए डिवाइस. - सुरक्षा और निजता के पहलू, Generic Sensor API के लिए सबसे ज़्यादा ज़रूरी हैं. साथ ही, यह पुराने सेंसर एपीआई की तुलना में ज़्यादा बेहतर सुरक्षा देता है. Permissions API के साथ इंटिग्रेशन किया गया है.
Accelerometer,Gyroscope,LinearAccelerationSensor,AbsoluteOrientationSensor,RelativeOrientationSensor, औरMagnetometerके लिए, स्क्रीन के कोऑर्डिनेट के साथ अपने-आप सिंक होने की सुविधा उपलब्ध है.
उपलब्ध सामान्य सेंसर एपीआई
लिखने के समय, कई सेंसर उपलब्ध हैं जिन पर एक्सपेरिमेंट किया जा सकता है.
मोशन सेंसर:
AccelerometerGyroscopeLinearAccelerationSensorAbsoluteOrientationSensorRelativeOrientationSensorGravitySensor
पर्यावरण से जुड़े सेंसर:
AmbientLightSensor(Chromium में#enable-generic-sensor-extra-classesफ़्लैग के पीछे.)Magnetometer(Chromium में#enable-generic-sensor-extra-classesफ़्लैग के पीछे.)
सुविधा का पता लगाना
हार्डवेयर एपीआई की सुविधा की पहचान करना मुश्किल है. ऐसा इसलिए, क्योंकि आपको यह पता लगाना होता है कि ब्राउज़र, उस इंटरफ़ेस के साथ काम करता है या नहीं और डिवाइस में उससे जुड़ा सेंसर मौजूद है या नहीं. यह जांच करना आसान है कि ब्राउज़र किसी इंटरफ़ेस के साथ काम करता है या नहीं. (Accelerometer को ऊपर बताए गए किसी अन्य इंटरफ़ेस से बदलें.)
if ('Accelerometer' in window) {
// The `Accelerometer` interface is supported by the browser.
// Does the device have an accelerometer, though?
}
किसी सुविधा का पता लगाने के लिए, आपको सेंसर से भी कनेक्ट करने की कोशिश करनी होगी. इस उदाहरण में, ऐसा करने का तरीका बताया गया है.
let accelerometer = null;
try {
accelerometer = new Accelerometer({ frequency: 10 });
accelerometer.onerror = (event) => {
// Handle runtime errors.
if (event.error.name === 'NotAllowedError') {
console.log('Permission to access sensor was denied.');
} else if (event.error.name === 'NotReadableError') {
console.log('Cannot connect to the sensor.');
}
};
accelerometer.onreading = (e) => {
console.log(e);
};
accelerometer.start();
} catch (error) {
// Handle construction errors.
if (error.name === 'SecurityError') {
console.log('Sensor construction was blocked by the Permissions Policy.');
} else if (error.name === 'ReferenceError') {
console.log('Sensor is not supported by the User Agent.');
} else {
throw error;
}
}
पॉलीफ़िल
जो ब्राउज़र Generic Sensor API के साथ काम नहीं करते उनके लिए, पॉलीफ़िल उपलब्ध है. पॉलीफ़िल की मदद से, सिर्फ़ काम के सेंसर के इंप्लीमेंटेशन लोड किए जा सकते हैं.
// Import the objects you need.
import { Gyroscope, AbsoluteOrientationSensor } from './src/motion-sensors.js';
// And they're ready for use!
const gyroscope = new Gyroscope({ frequency: 15 });
const orientation = new AbsoluteOrientationSensor({ frequency: 60 });
ये सभी सेंसर क्या हैं? मैं इनका इस्तेमाल कैसे करूं?
सेंसर एक ऐसा विषय है जिसके बारे में आपको कुछ जानकारी देनी पड़ सकती है. अगर आपको सेंसर के बारे में जानकारी है, तो सीधे कोडिंग वाले सेक्शन पर जाएं. इसके अलावा, आइए हर उस सेंसर के बारे में ज़्यादा जानें जो काम करता है.
ऐक्सिलरोमीटर और लीनियर ऐक्सिलरेशन सेंसर
Accelerometer सेंसर, सेंसर को होस्ट करने वाले डिवाइस के ऐक्सलरेशन को तीन ऐक्सिस (X, Y, और Z) पर मापता है. यह सेंसर एक इनर्शियल सेंसर है. इसका मतलब है कि जब डिवाइस सीधी रेखा में नीचे गिर रहा होता है, तब कुल मेज़र किया गया ऐक्सलरेशन 0 मी॰/से॰2 होता है. वहीं, जब कोई डिवाइस टेबल पर सीधा रखा होता है, तब ऊपर की ओर (Z ऐक्सिस) ऐक्सलरेशन, पृथ्वी के गुरुत्वाकर्षण के बराबर होता है. यानी, g ≈ +9.8 मी॰/से॰2. ऐसा इसलिए होता है, क्योंकि यह सेंसर, टेबल के डिवाइस को ऊपर की ओर धकेलने वाले फ़ोर्स को मेज़र करता है. डिवाइस को दाईं ओर ले जाने पर, X ऐक्सिस पर ऐक्सलरेशन पॉज़िटिव होगा. वहीं, डिवाइस को दाईं ओर से बाईं ओर ले जाने पर, ऐक्सलरेशन नेगेटिव होगा.
एक्सलरोमीटर का इस्तेमाल इन कामों के लिए किया जा सकता है: कदमों की गिनती करना, मोशन सेंसिंग या डिवाइस के ओरिएंटेशन का पता लगाना. अक्सर, ऐक्सिलरोमीटर से मिले डेटा को अन्य सोर्स से मिले डेटा के साथ मिलाकर, फ़्यूज़न सेंसर बनाए जाते हैं. जैसे, ओरिएंटेशन सेंसर.
LinearAccelerationSensor सेंसर, उस डिवाइस पर लागू होने वाले ऐक्सलरेशन को मेज़र करता है जिस पर सेंसर मौजूद है. इसमें ग्रैविटी की वजह से होने वाले ऐक्सलरेशन को शामिल नहीं किया जाता. जब कोई डिवाइस स्थिर होता है, जैसे कि टेबल पर सीधा रखा गया हो, तो सेंसर तीनों ऐक्सिस पर ≈ 0 मीटर/सेकंड2 ऐक्सलरेशन मेज़र करेगा.
ग्रैविटी सेंसर
उपयोगकर्ता, Accelerometer और LinearAccelerometer सेंसर की रीडिंग की मैन्युअल तरीके से जांच करके, गुरुत्वाकर्षण सेंसर की रीडिंग के आस-पास की रीडिंग पा सकते हैं. हालांकि, यह प्रक्रिया मुश्किल हो सकती है. साथ ही, यह उन सेंसर से मिली वैल्यू की सटीकता पर निर्भर करती है. Android जैसे प्लैटफ़ॉर्म, ऑपरेटिंग सिस्टम के हिस्से के तौर पर गुरुत्वाकर्षण की रीडिंग दे सकते हैं. इनकी गणना करना सस्ता होना चाहिए. साथ ही, ये उपयोगकर्ता के हार्डवेयर के हिसाब से ज़्यादा सटीक वैल्यू देते हैं. इसके अलावा, एपीआई एर्गोनॉमिक्स के हिसाब से इनका इस्तेमाल करना आसान होना चाहिए. GravitySensor, गुरुत्वाकर्षण की वजह से डिवाइस के X, Y, और Z ऐक्सिस पर ऐक्सलरेशन का असर दिखाता है.
जाइरोस्कोप
Gyroscope सेंसर, डिवाइस के लोकल X, Y, और Z ऐक्सिस के आस-पास रेडियन प्रति सेकंड में कोणीय वेग को मापता है. ज़्यादातर उपभोक्ता डिवाइसों में मेकेनिकल (MEMS) जाइरोस्कोप होते हैं. ये इनर्शल सेंसर होते हैं, जो इनर्शल कोरियोलिस फ़ोर्स के आधार पर रोटेशन रेट को मेज़र करते हैं. एमईएमएस गायरोस्कोप में ड्रिफ़्ट होने की संभावना होती है. यह सेंसर की गुरुत्वाकर्षण संवेदनशीलता की वजह से होता है. इससे सेंसर का इंटरनल मेकेनिकल सिस्टम खराब हो जाता है. जायरोस्कोप, ज़्यादा फ़्रीक्वेंसी पर ऑसिलेट करते हैं. उदाहरण के लिए, 10 किलोहर्ट्ज़ है. इसलिए, यह अन्य सेंसर के मुकाबले ज़्यादा बैटरी इस्तेमाल कर सकता है.
ओरिएंटेशन सेंसर
AbsoluteOrientationSensor एक फ़्यूज़न सेंसर है. यह पृथ्वी के कोऑर्डिनेट सिस्टम के हिसाब से, डिवाइस के रोटेशन को मेज़र करता है. वहीं, RelativeOrientationSensor ऐसा डेटा उपलब्ध कराता है जो मोशन सेंसर होस्ट करने वाले डिवाइस के रोटेशन को दिखाता है. यह रोटेशन, स्टेशनरी रेफ़रंस कोऑर्डिनेट सिस्टम के हिसाब से होता है.
सभी मॉडर्न 3D JavaScript फ़्रेमवर्क, रोटेशन दिखाने के लिए क्वाटर्नियन और रोटेशन मैट्रिक्स का इस्तेमाल करते हैं. हालांकि, अगर WebGL का सीधे तौर पर इस्तेमाल किया जाता है, तो OrientationSensor में quaternion प्रॉपर्टी और populateMatrix() तरीका, दोनों आसानी से उपलब्ध होते हैं.
यहां कुछ स्निपेट दिए गए हैं:
let torusGeometry = new THREE.TorusGeometry(7, 1.6, 4, 3, 6.3);
let material = new THREE.MeshBasicMaterial({ color: 0x0071c5 });
let torus = new THREE.Mesh(torusGeometry, material);
scene.add(torus);
// Update mesh rotation using quaternion.
const sensorAbs = new AbsoluteOrientationSensor();
sensorAbs.onreading = () => torus.quaternion.fromArray(sensorAbs.quaternion);
sensorAbs.start();
// Update mesh rotation using rotation matrix.
const sensorRel = new RelativeOrientationSensor();
let rotationMatrix = new Float32Array(16);
sensor_rel.onreading = () => {
sensorRel.populateMatrix(rotationMatrix);
torus.matrix.fromArray(rotationMatrix);
};
sensorRel.start();
const mesh = new BABYLON.Mesh.CreateCylinder('mesh', 0.9, 0.3, 0.6, 9, 1, scene);
const sensorRel = new RelativeOrientationSensor({ frequency: 30 });
sensorRel.onreading = () => mesh.rotationQuaternion.FromArray(sensorRel.quaternion);
sensorRel.start();
// Initialize sensor and update model matrix when new reading is available.
let modMatrix = new Float32Array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);
const sensorAbs = new AbsoluteOrientationSensor({ frequency: 60 });
sensorAbs.onreading = () => sensorAbs.populateMatrix(modMatrix);
sensorAbs.start();
// Somewhere in rendering code, update vertex shader attribute for the model
gl.uniformMatrix4fv(modMatrixAttr, false, modMatrix);
ओरिएंटेशन सेंसर की मदद से, कई तरह के काम किए जा सकते हैं. जैसे, इमर्सिव गेमिंग, ऑगमेंटेड और वर्चुअल रिएलिटी.
मोशन सेंसर, इस्तेमाल के ऐडवांस उदाहरणों, और ज़रूरी शर्तों के बारे में ज़्यादा जानने के लिए, मोशन सेंसर के बारे में जानकारी देने वाला दस्तावेज़ देखें.
स्क्रीन के कोऑर्डिनेट के साथ सिंक्रनाइज़ेशन
डिफ़ॉल्ट रूप से, स्पेशल सेंसर' की रीडिंग को डिवाइस से जुड़े लोकल कोऑर्डिनेट सिस्टम में हल किया जाता है. इसमें स्क्रीन ओरिएंटेशन को ध्यान में नहीं रखा जाता है.
हालांकि, गेम या ऑगमेंटेड और वर्चुअल रिएलिटी जैसे कई इस्तेमाल के मामलों में, सेंसर की रीडिंग को ऐसे कोऑर्डिनेट सिस्टम में हल करने की ज़रूरत होती है जो स्क्रीन ओरिएंटेशन से जुड़ा हो.
पहले, सेंसर की रीडिंग को स्क्रीन के कोऑर्डिनेट पर फिर से मैप करने की सुविधा को JavaScript में लागू करना पड़ता था. यह तरीका सही नहीं है. इससे वेब ऐप्लिकेशन के कोड की जटिलता भी काफ़ी बढ़ जाती है. वेब ऐप्लिकेशन को स्क्रीन ओरिएंटेशन में होने वाले बदलावों पर नज़र रखनी होती है. साथ ही, सेंसर की रीडिंग के लिए कोऑर्डिनेट ट्रांसफ़ॉर्मेशन करना होता है. यूलर ऐंगल या क्वाटर्नियन के लिए ऐसा करना आसान नहीं होता.
Generic Sensor API, एक आसान और भरोसेमंद समाधान उपलब्ध कराता है! लोकल कोऑर्डिनेट सिस्टम को, सभी तय की गई स्पेशल सेंसर क्लास के लिए कॉन्फ़िगर किया जा सकता है: Accelerometer, Gyroscope, LinearAccelerationSensor, AbsoluteOrientationSensor, RelativeOrientationSensor, और Magnetometer. सेंसर ऑब्जेक्ट कंस्ट्रक्टर को referenceFrame विकल्प पास करके, उपयोगकर्ता यह तय करता है कि दिखाई गई रीडिंग को डिवाइस या स्क्रीन के कोऑर्डिनेट में बदला जाएगा या नहीं.
// Sensor readings are resolved in the Device coordinate system by default.
// Alternatively, could be RelativeOrientationSensor({referenceFrame: "device"}).
const sensorRelDevice = new RelativeOrientationSensor();
// Sensor readings are resolved in the Screen coordinate system. No manual remapping is required!
const sensorRelScreen = new RelativeOrientationSensor({ referenceFrame: 'screen' });
चलो कोड करें!
Generic Sensor API का इस्तेमाल करना बहुत आसान है! सेंसर इंटरफ़ेस में, सेंसर की स्थिति को कंट्रोल करने के लिए start() और stop() तरीके होते हैं. साथ ही, सेंसर के चालू होने, गड़बड़ियों, और नई रीडिंग के बारे में सूचनाएं पाने के लिए कई इवेंट हैंडलर होते हैं. सेंसर की कॉन्क्रीट क्लास, आम तौर पर बेस क्लास में अपने खास रीडिंग एट्रिब्यूट जोड़ती हैं.
डेवलपमेंट एनवायरमेंट
डेवलपमेंट के दौरान, localhost के ज़रिए सेंसर का इस्तेमाल किया जा सकेगा. अगर आपको मोबाइल डिवाइसों के लिए डेवलपमेंट करना है, तो अपने लोकल सर्वर के लिए पोर्ट फ़ॉरवर्डिंग सेट अप करें. इसके बाद, आप डेवलपमेंट शुरू कर सकते हैं!
कोड तैयार हो जाने के बाद, उसे ऐसे सर्वर पर डिप्लॉय करें जो एचटीटीपीएस के साथ काम करता हो. GitHub Pages को एचटीटीपीएस पर दिखाया जाता है. इसलिए, यह आपके डेमो शेयर करने के लिए एक बेहतरीन प्लैटफ़ॉर्म है.
3D मॉडल को घुमाना
इस सामान्य उदाहरण में, हम 3D मॉडल के रोटेशन क्वाटर्नियन में बदलाव करने के लिए, ऐब्सलूट ओरिएंटेशन सेंसर से मिले डेटा का इस्तेमाल करते हैं. model, three.js Object3D क्लास का इंस्टेंस है. इसमें quaternion प्रॉपर्टी होती है. ओरिएंटेशन फ़ोन डेमो के इस कोड स्निपेट में बताया गया है कि 3D मॉडल को घुमाने के लिए, ऐब्सलूट ओरिएंटेशन सेंसर का इस्तेमाल कैसे किया जा सकता है.
function initSensor() {
sensor = new AbsoluteOrientationSensor({ frequency: 60 });
sensor.onreading = () => model.quaternion.fromArray(sensor.quaternion);
sensor.onerror = (event) => {
if (event.error.name == 'NotReadableError') {
console.log('Sensor is not available.');
}
};
sensor.start();
}
डिवाइस का ओरिएंटेशन, WebGL सीन में 3D model रोटेशन में दिखेगा.
पंचमीटर
यहां दिया गया कोड स्निपेट, पंचमीटर डेमो से लिया गया है. इसमें बताया गया है कि लीनियर ऐक्सलरेशन सेंसर का इस्तेमाल करके, किसी डिवाइस की ज़्यादा से ज़्यादा वेलोसिटी का हिसाब कैसे लगाया जा सकता है. इसमें यह माना गया है कि डिवाइस शुरू में स्थिर है.
this.maxSpeed = 0;
this.vx = 0;
this.ax = 0;
this.t = 0;
/* … */
this.accel.onreading = () => {
let dt = (this.accel.timestamp - this.t) * 0.001; // In seconds.
this.vx += ((this.accel.x + this.ax) / 2) * dt;
let speed = Math.abs(this.vx);
if (this.maxSpeed < speed) {
this.maxSpeed = speed;
}
this.t = this.accel.timestamp;
this.ax = this.accel.x;
};
मौजूदा वेलोसिटी का हिसाब, ऐक्सलरेशन फ़ंक्शन के इंटिग्रल के अनुमान के तौर पर लगाया जाता है.
Chrome DevTools की मदद से डीबग करना और सेंसर को बदलना
कुछ मामलों में, Generic Sensor API का इस्तेमाल करने के लिए आपको किसी फ़िज़िकल डिवाइस की ज़रूरत नहीं होती. Chrome DevTools में, डिवाइस ओरिएंटेशन को सिम्युलेट करने की सुविधा उपलब्ध है.
निजता और सुरक्षा
सेंसर की रीडिंग संवेदनशील डेटा होती है. इस पर, नुकसान पहुंचाने वाले वेब पेजों से कई तरह के हमले किए जा सकते हैं. Generic Sensor API को लागू करने के दौरान, सुरक्षा और निजता से जुड़े संभावित जोखिमों को कम करने के लिए, कुछ पाबंदियां लागू की जाती हैं. एपीआई का इस्तेमाल करने वाले डेवलपर को इन सीमाओं के बारे में पता होना चाहिए. इसलिए, आइए इनके बारे में संक्षेप में जानते हैं.
सिर्फ़ एचटीटीपीएस
Generic Sensor API एक अहम सुविधा है. इसलिए, ब्राउज़र इसे सिर्फ़ सुरक्षित कॉन्टेक्स्ट पर इस्तेमाल करने की अनुमति देता है. इसका मतलब यह है कि Generic Sensor API का इस्तेमाल करने के लिए, आपको एचटीटीपीएस के ज़रिए अपने पेज को ऐक्सेस करना होगा. डेवलपमेंट के दौरान, http://localhost के ज़रिए ऐसा किया जा सकता है. हालांकि, प्रोडक्शन के लिए आपके सर्वर पर एचटीटीपीएस होना ज़रूरी है. सबसे सही तरीकों और दिशा-निर्देशों के लिए, सुरक्षित और भरोसेमंद कलेक्शन देखें.
अनुमतियों की नीति का इंटिग्रेशन
Generic Sensor API में मौजूद Permissions Policy integration, किसी फ़्रेम के लिए सेंसर के डेटा के ऐक्सेस को कंट्रोल करता है.
डिफ़ॉल्ट रूप से, Sensor ऑब्जेक्ट सिर्फ़ मुख्य फ़्रेम या एक ही ऑरिजिन वाले सबफ़्रेम में बनाए जा सकते हैं. इससे अलग-अलग ऑरिजिन वाले iframe को सेंसर डेटा को बिना अनुमति के पढ़ने से रोका जा सकता है. इस डिफ़ॉल्ट सेटिंग में बदलाव किया जा सकता है. इसके लिए, नीति के हिसाब से कंट्रोल की जाने वाली सुविधाओं को चालू या बंद करें.
नीचे दिए गए स्निपेट में, अलग ऑरिजिन वाले iframe को ऐक्सिलरोमीटर डेटा का ऐक्सेस देने के बारे में बताया गया है. इसका मतलब है कि अब वहां Accelerometer या LinearAccelerationSensor ऑब्जेक्ट बनाए जा सकते हैं.
<iframe src="https://third-party.com" allow="accelerometer" />
सेंसर की रीडिंग भेजने की सुविधा निलंबित की जा सकती है
सेंसर की रीडिंग सिर्फ़ उस वेब पेज को ऐक्सेस करने की अनुमति होती है जो उपयोगकर्ता को दिख रहा हो. इसका मतलब है कि उपयोगकर्ता को उस वेब पेज के साथ इंटरैक्ट करना होगा. इसके अलावा, अगर उपयोगकर्ता का फ़ोकस किसी दूसरे ऑरिजिन वाले सबफ़्रेम पर चला जाता है, तो पैरंट फ़्रेम को सेंसर का डेटा नहीं दिया जाएगा. इससे पैरंट फ़्रेम को उपयोगकर्ता के इनपुट का अनुमान लगाने से रोका जाता है.
आगे क्या करना है?
सेंसर की कुछ क्लास पहले से तय की गई हैं, जिन्हें आने वाले समय में लागू किया जाएगा. जैसे, स्क्रीन की रोशनी को अपने-आप घटाने-बढ़ाने वाला सेंसर या प्रॉक्सिमिटी (निकटता) सेंसर. हालांकि, जेनेरिक सेंसर फ़्रेमवर्क की बेहतरीन एक्सटेंसिबिलिटी की वजह से, हम अलग-अलग तरह के सेंसर को दिखाने वाली और भी नई क्लास के दिखने का अनुमान लगा सकते हैं.
आने वाले समय में काम करने के लिए एक और अहम क्षेत्र, Generic Sensor API को बेहतर बनाना है. फ़िलहाल, Generic Sensor स्पेसिफ़िकेशन, कैंडिडेट रेकमेंडेशन है. इसका मतलब है कि डेवलपर की ज़रूरतों के हिसाब से, इसमें अब भी सुधार किए जा सकते हैं और नई सुविधाएं जोड़ी जा सकती हैं.
आपकी मदद की ज़रूरत है!
सेंसर की खास बातों से जुड़ी जानकारी, सुझाव के तौर पर उपलब्ध मैच्योरिटी लेवल पर पहुंच गई है. इसलिए, वेब और ब्राउज़र डेवलपर से मिले सुझावों की हम सराहना करते हैं. हमें बताएं कि कौनसी सुविधाएं जोड़नी चाहिए या अगर आपको मौजूदा एपीआई में कोई बदलाव करना है, तो हमें बताएं.
Chrome को लागू करने से जुड़ी खासियत की समस्याएं और बग भी सबमिट करें.
संसाधन
- डेमो प्रोजेक्ट: https://w3c.github.io/generic-sensor-demos/
- Generic Sensor API की खास बातें: https://w3c.github.io/sensors/
- स्पेसिफ़िकेशन से जुड़ी समस्याएं: https://github.com/w3c/sensors/issues
- W3C वर्किंग ग्रुप की ईमेल भेजने वाली सूची: public-device-apis@w3.org
- Chrome की सुविधा की स्थिति: https://www.chromestatus.com/feature/5698781827825664
- लागू करने से जुड़ी गड़बड़ियां: http://crbug.com?q=component:Blink>Sensor
Acknowledgements
इस लेख की समीक्षा जो मेडली और केसी बास्क ने की है.