JavaScript köprü API'si
NFC
window.AndroidNFC ΓΌzerinden bir etiketi okuma ve NDEFReader polyfill'inin arkasΔ±ndaki yazma tarafΔ±.
NDEFReader web standardı#
new NDEFReader() — Web NFC
Örnek
Standart Web NFC: new NDEFReader(), yΓΌklenen uygulamada NFC etiketlerini okur, yazar ve kilitler; Android'de Chrome'un kabul ettiΔi aynΔ± kodla.
DΓΆner deΔer: web standardΔ±nda olduΔu gibi Promise'ler ve reading / readingerror olaylarΔ±. KayΔ±tlar NDEFRecord nesneleridir: recordType ('text', 'url', 'absolute-url', 'mime', 'smart-poster', 'empty', 'unknown' veya 'example.com:thing' gibi harici bir tΓΌr), mediaType (mime kayΔ±tlarΔ±), id, encoding ve lang (metin kayΔ±tlarΔ±) ve data bir DataView olarak. Gerekenler: derleme yaparken AdΔ±m 4'te (EriΕim) Web NFC DesteΔi aΓ§Δ±n. O olmadan NDEFReader bulunmaz. Γalışma zamanΔ± izin istemi yoktur; navigator.permissions.query({name:'nfc'}) yanΔ±tlar granted.
Etiketleri okuyun. data deΔerini Chrome'daki gibi TextDecoder ile Γ§ΓΆzΓΌn:
function describe(record) {
if (record.recordType === 'text') return new TextDecoder(record.encoding).decode(record.data);
if (record.recordType === 'url' || record.recordType === 'absolute-url') return new TextDecoder().decode(record.data);
if (record.recordType === 'mime') return record.mediaType + ' (' + record.data.byteLength + ' bytes)';
return record.recordType;
}
var scanStop = null;
document.getElementById('read').addEventListener('click', async function () {
if (!('NDEFReader' in window)) { showStatus('NFC is not available in this app.'); return; }
var reader = new NDEFReader();
scanStop = new AbortController();
reader.onreading = function (e) {
showStatus('Tag ' + e.serialNumber + ': ' + e.message.records.map(describe).join(' | '));
};
reader.onreadingerror = function () { showStatus('That tag holds no NFC data this phone can read.'); };
try {
await reader.scan({ signal: scanStop.signal });
showStatus('Hold a tag to the back of the phone.');
} catch (err) {
showStatus('NFC error: ' + err.name + ' ' + err.message); // NotReadableError = NFC switched off
}
});
document.getElementById('stop').addEventListener('click', function () {
if (scanStop) scanStop.abort(); // the standard way to stop scanning
});Metin veya baΔlantΔ± yazΔ±n. Promise, kullanΔ±cΔ± bir etikete dokunduktan sonra Γ§ΓΆzΓΌlΓΌr:
async function writeTag(kind, value) {
if (!('NDEFReader' in window)) { showStatus('NFC is not available in this app.'); return; }
var reader = new NDEFReader();
showStatus('Tap a tag to write it...');
try {
if (kind === 'text') await reader.write(value); // same as { records: [{ recordType: 'text', data: value }] }
else await reader.write({ records: [{ recordType: 'url', data: value }] }, { overwrite: false });
showStatus('Tag written.');
} catch (err) {
showStatus('Write failed: ' + err.name + ' ' + err.message); // NotAllowedError: read-only, or overwrite:false on a used tag
}
}Bir etiketi sonsuza dek kilitleyin. makeReadOnly() geri alΔ±namaz β ΓΆnce sorun:
async function lockTag() {
if (!('NDEFReader' in window)) return;
if (!confirm('Lock the next tag you tap? It can never be changed again.')) return;
try { await new NDEFReader().makeReadOnly(); showStatus('Tag locked.'); }
catch (err) { showStatus('Lock failed: ' + err.message); }
}Notlar: write iΓ§in kayΔ±t tΓΌrleri: text (dize veya encoding ile bayt), url ve absolute-url (dize), mime (bayt + mediaType), smart-poster ({records: [...]}), 'domain:thing' harici tΓΌrΓΌ (bayt veya {records: [...]}), unknown (bayt) ve empty. DΓΌz bir dize metin kaydΔ± yazar; dΓΌz baytlar application/octet-stream mime kaydΔ± yazar. YalnΔ±zca scan() Γ§aΔΔ±ran okuyucular reading olaylarΔ±nΔ± alΔ±r; signal ΓΌzerinde AbortController.abort() o okuyucuyu durdurur (standartta stop() yoktur). readingerror, NFC verisi tutamayan bir etiket iΓ§in tetiklenir. Telefon aynΔ± anda YALNIZCA BΔ°R etiket iΕlemi bekler: biri beklerken yeni bir write() veya makeReadOnly() onun yerini alΔ±r ve deΔiΕtirilen Γ§aΔrΔ± AbortError ile reddedilir (Chrome sΔ±raya alΔ±rdΔ±). write() / makeReadOnly() ΓΌzerindeki bir signal beklemeyi iptal eder. Hatalar: NotSupportedError (NFC yok, etiket NDEF tutamΔ±yor veya Γ§ok kΓΌΓ§ΓΌk), NotReadableError (NFC kapalΔ±), NotAllowedError (salt okunur etiket veya kayΔ±tlΔ± bir etikette overwrite: false), NetworkError (etiket uzaklaΕtΔ±), TypeError (standardΔ±n izin vermediΔi bir kayΔ±t). NDEFReader ana sayfada vardΔ±r, iframe'lerin iΓ§inde yoktur.
__nfcCancelWrite köprü#
window.WebToApk.__nfcCancelWrite()
Bekleyen yazma/kilitleme iΕlemini iptal eder (polyfill, iΕlemin `signal` deΔeri iptal edildiΔinde bunu Γ§aΔΔ±rΔ±r).
Örnek
SΔ±raya alΔ±nmΔ±Ε bir NFC yazma veya kilitleme iΕlemini siler, bΓΆylece sonraki etiket dokunuΕu normal Εekilde okunur. Sayfalar web standardΔ± ΓΌzerinden iptal eder β bir AbortController signal β ve NDEFReader polyfill'i bunu onlar iΓ§in Γ§aΔΔ±rΔ±r.
DΓΆner deΔer: hiΓ§bir Εey. Gerekenler: derleme yaparken AdΔ±m 4'te (EriΕim) Web NFC DesteΔi aΓ§Δ±k olmalΔ±.
UygulamanΔ±n dikkate aldΔ±ΔΔ± standart yol β bekleyen write() Εununla reddedilir: AbortError:
var controller = null;
async function writeWithCancel(text) {
if (!('NDEFReader' in window)) { showStatus('NFC is not available in this app.'); return; }
controller = new AbortController();
showStatus('Tap a tag to write it... (or press Cancel)');
try {
await new NDEFReader().write(text, { signal: controller.signal });
showStatus('Tag written.');
} catch (err) {
showStatus(err.name === 'AbortError' ? 'Cancelled.' : 'Write failed: ' + err.message);
}
}
document.getElementById('cancel').addEventListener('click', function () {
if (controller) controller.abort();
});Zamanla etiket gelmezse kendiliΔinden vazgeΓ§in; sinyali iptal eden bir zamanlayΔ±cΔ± aynΔ± Εekilde iptal eder:
async function writeWithTimeout(url, ms) {
if (!('NDEFReader' in window)) { showStatus('NFC is not available in this app.'); return; }
var controller = new AbortController();
var timer = setTimeout(function () { controller.abort(); }, ms);
showStatus('Tap a tag within ' + Math.round(ms / 1000) + ' seconds...');
try {
await new NDEFReader().write({ records: [{ recordType: 'url', data: url }] }, { signal: controller.signal });
showStatus('Tag written.');
} catch (err) {
showStatus(err.name === 'AbortError' ? 'Timed out. Tap Write to try again.' : 'Write failed: ' + err.message);
} finally {
clearTimeout(timer);
}
}KullanΔ±cΔ± ekrandan ayrΔ±ldΔ±ΔΔ±nda bekleyen bir kilidi (veya yazmayΔ±) iptal edin; bΓΆylece sonraki bir dokunuΕ bir etiketi deΔiΕtirmez:
var pendingTagOp = null;
window.addEventListener('hashchange', function () {
if (pendingTagOp) { pendingTagOp.abort(); pendingTagOp = null; }
});
document.getElementById('lock').addEventListener('click', function () {
if (!('NDEFReader' in window)) { showStatus('NFC is not available in this app.'); return; }
if (pendingTagOp) pendingTagOp.abort();
var controller = pendingTagOp = new AbortController();
showStatus('Tap the tag to lock it...');
new NDEFReader().makeReadOnly({ signal: controller.signal })
.then(function () { showStatus('Tag locked.'); })
.catch(function (err) { if (err.name !== 'AbortError') showStatus('Lock failed: ' + err.message); })
.finally(function () { if (pendingTagOp === controller) pendingTagOp = null; });
});Notlar: WebToApk.__nfcCancelWrite() iΕlevini kendiniz Γ§aΔΔ±rmayΔ±n: doΔrudan Γ§aΔrΔ±lΔ±rsa yerel beklemeyi bΔ±rakΔ±r ama sayfanΔ±n Promise'ini sonuΓ§landΔ±ramaz. signal ikisini de yapar. Δ°ptal etmek ayrΔ±ca sΔ±raya alΔ±nmΔ±Ε makeReadOnly().
__nfcMakeReadOnly köprü#
window.WebToApk.__nfcMakeReadOnly(): String
Sonraki etiket dokunuΕΔ± iΓ§in kalΔ±cΔ± bir kilit (`NDEFReader.makeReadOnly()`) sΔ±raya alΔ±r; iΕlem kimliΔini dΓΆndΓΌrΓΌr, bu uygulamada NFC kapalΔ±ysa "" dΓΆndΓΌrΓΌr.
Örnek
NDEFReader.makeReadOnly() arkasΔ±ndaki iΓ§ aktarΔ±m. Sayfalar new NDEFReader().makeReadOnly() kullanΔ±r; bunu asla doΔrudan Γ§aΔΔ±rmayΔ±n.
DΓΆner deΔer: (makeReadOnly ΓΌzerinden) kullanΔ±cΔ± bir etiketi dokundurup etiket kilitlendikten sonra Γ§ΓΆzΓΌlen veya DOMException ile reddedilen bir Promise. Gerekenler: derleme yaparken AdΔ±m 4'te (EriΕim) Web NFC DesteΔi aΓ§Δ±k olmalΔ±.
Kilitleme kalΔ±cΔ±dΔ±r. Γnce etiketi yazΔ±n, sonra kilitleyin ve ikisinden ΓΆnce de kullanΔ±cΔ±ya sorun:
document.getElementById('publish-tag').addEventListener('click', async function () {
if (!('NDEFReader' in window)) { showStatus('NFC is not available in this app.'); return; }
if (!confirm('Write and lock this tag? A locked tag can never be changed.')) return;
var reader = new NDEFReader();
try {
showStatus('Tap the tag to write it...');
await reader.write({ records: [{ recordType: 'url', data: 'https://example.com/item/42' }] });
showStatus('Now tap the same tag again to lock it...');
await reader.makeReadOnly();
showStatus('Tag written and locked.');
} catch (err) {
showStatus('Failed: ' + err.message);
}
});Zaten yazΔ±lmΔ±Ε bir etiketi kilitleyin ve 20 saniye iΓ§inde etiket gelmezse vazgeΓ§in:
async function lockTag() {
if (!('NDEFReader' in window)) { showStatus('NFC is not available in this app.'); return; }
if (!confirm('Lock this tag for good? It can never be changed again.')) return;
var controller = new AbortController();
var timer = setTimeout(function () { controller.abort(); }, 20000);
showStatus('Tap the tag to lock it...');
try {
await new NDEFReader().makeReadOnly({ signal: controller.signal });
showStatus('Tag locked.');
} catch (err) {
if (err.name === 'AbortError') showStatus('No tag was tapped. Try again when ready.');
else if (err.name === 'NotAllowedError') showStatus('This kind of tag cannot be locked.');
else showStatus('Lock failed: ' + err.message);
} finally {
clearTimeout(timer);
}
}Γnce bir etiketi okuyun ve yalnΔ±zca beklenen baΔlantΔ±yΔ± iΓ§eriyorsa kilitlemeyi ΓΆnerin:
async function checkThenLock(expectedUrl) {
if (!('NDEFReader' in window)) { showStatus('NFC is not available in this app.'); return; }
var reader = new NDEFReader();
var scanning = new AbortController();
var lockBtn = document.getElementById('lock-btn');
reader.onreading = function (e) {
var rec = e.message.records.find(function (r) { return r.recordType === 'url'; });
var url = rec ? new TextDecoder().decode(rec.data) : null;
showStatus(url ? 'Tag points to ' + url : 'This tag holds no link.');
lockBtn.disabled = url !== expectedUrl;
};
await reader.scan({ signal: scanning.signal });
showStatus('Hold the tag to the phone to check it.');
lockBtn.onclick = async function () {
if (!confirm('Lock this tag? It can never be changed again.')) return;
scanning.abort();
showStatus('Tap the tag again to lock it...');
try { await reader.makeReadOnly(); showStatus('Tag locked.'); }
catch (err) { showStatus('Lock failed: ' + err.message); }
};
}Notlar: Her adΔ±m kendi dokunuΕunu gerektirir. Γaδrı bir iΕlem kimliΔi dΓΆndΓΌrΓΌr ve sonuΓ§ window.__appmintNfcDone ΓΌzerinden gelir. Reddedilme nedenleri: NotSupportedError "Etiket NDEF desteklemiyor", NotAllowedError "Bu etiket salt okunur yapΔ±lamaz" (birΓ§ok etiket kilitlenemez), etiket uzaklaΕtΔ±ΔΔ±nda NetworkError. Bir kilit beklerken write() baΕlatmak kilidin yerini alΔ±r ve kilit AbortError ile reddedilir. makeReadOnly({ signal }) iΓ§ine verilen bir signal beklemeyi iptal eder.
__nfcState köprü#
window.WebToApk.__nfcState(): String
"on", "off" (NFC telefon ayarlarΔ±ndan kapatΔ±lmΔ±Ε) veya "none" (NFC yok ya da bu uygulamada etkin deΔil) β `NDEFReader.scan()` ΓΆnce bunu denetler.
Örnek
NDEFReader.scan() arkasΔ±ndaki iΓ§ denetim: bu uygulamanΔ±n NFC'yi Εu anda kullanΔ±p kullanamayacaΔΔ±. Sayfalar scan() Γ§aΔΔ±rΔ±r ve onun reddini okur.
DΓΆner deΔer: 'on', 'off' (NFC telefon ayarlarΔ±ndan kapatΔ±lmΔ±Ε) veya 'none' (telefonda NFC yok ya da uygulama Web NFC DesteΔi olmadan derlenmiΕ). Gerekenler: derleme yaparken AdΔ±m 4'te (EriΕim) Web NFC DesteΔi aΓ§Δ±k olmalΔ±.
Standart yol β scan() aynΔ± yanΔ±tla reddedilir:
async function startReading() {
if (!('NDEFReader' in window)) { showStatus('NFC is not available in this app.'); return; }
try {
await new NDEFReader().scan();
showStatus('Hold a tag to the back of the phone.');
} catch (err) {
if (err.name === 'NotReadableError') showStatus('Turn on NFC in the phone settings, then try again.');
else if (err.name === 'NotSupportedError') showStatus('This phone has no NFC.');
else showStatus('NFC error: ' + err.message);
}
}Ekran aΓ§Δ±ldΔ±ΔΔ±nda bir kez denetleyin; NFC paneli, "NFC'yi aΓ§Δ±n" ipucu veya NFC'yi tamamen gizleme arasΔ±nda seΓ§im yapmak iΓ§in. YoklamanΔ±n taramasΔ±nΔ± hemen iptal etmek hiΓ§bir Εeyin Γ§alΔ±ΕΔ±r durumda kalmamasΔ±nΔ± saΔlar:
async function nfcStatus() {
if (!('NDEFReader' in window)) return 'none';
var probe = new AbortController();
try {
await new NDEFReader().scan({ signal: probe.signal });
return 'on';
} catch (err) {
return err.name === 'NotReadableError' ? 'off' : 'none';
} finally {
probe.abort();
}
}
async function refreshNfcUi() {
var state = await nfcStatus();
document.getElementById('nfc-panel').hidden = state !== 'on';
document.getElementById('nfc-off-hint').hidden = state !== 'off';
}
refreshNfcUi();
document.addEventListener('visibilitychange', function () {
if (document.visibilityState === 'visible') refreshNfcUi(); // back from the phone settings
});Etiketleri yalnΔ±zca bir ekran aΓ§Δ±kken okuyun ve boΕ ya da okunamayan bir etiketi NFC'nin kapalΔ± olmasΔ±ndan ayΔ±rt edin:
var tagScreen = null;
async function openTagScreen() {
if (!('NDEFReader' in window)) { showStatus('NFC is not available in this app.'); return; }
tagScreen = new AbortController();
var reader = new NDEFReader();
reader.onreading = function (e) {
var n = e.message.records.length;
showStatus(n ? 'Tag ' + e.serialNumber + ' holds ' + n + ' record(s).' : 'This tag is empty.');
};
reader.onreadingerror = function () { showStatus('This tag cannot be read. Try another one.'); };
try {
await reader.scan({ signal: tagScreen.signal });
showStatus('Hold a tag to the back of the phone.');
} catch (err) {
showStatus(err.name === 'NotReadableError' ? 'NFC is off. Turn it on in the phone settings.' : 'NFC error: ' + err.message);
}
}
function closeTagScreen() {
if (tagScreen) { tagScreen.abort(); tagScreen = null; }
}Notlar: Polyfill iΓ§in altyapΔ±dΔ±r; scan() kullanΔ±n. window.AndroidNFC.startScan() aynΔ± soruyu mantΔ±ksal deΔerle yanΔ±tlar ve NFC kapalΔ±yken "LΓΌtfen NFC'yi aΓ§Δ±n" mesajΔ±nΔ± gΓΆsterir.
__nfcWrite köprü#
window.WebToApk.__nfcWrite(messageJson: String): String
[messageJson] deΔerini (`NDEFReader.write()` ile oluΕturulan `{records:[β¦], overwrite}`) sonraki etiket dokunuΕu iΓ§in sΔ±raya alΔ±r ve iΕlem kimliΔini dΓΆndΓΌrΓΌr; bu uygulamada NFC etkin deΔilse "" dΓΆndΓΌrΓΌr.
Örnek
NDEFReader.write(message) arkasΔ±ndaki iΓ§ aktarΔ±m. Sayfalar new NDEFReader().write(...) kullanΔ±r; bunu asla doΔrudan Γ§aΔΔ±rmayΔ±n.
DΓΆner deΔer: (write ΓΌzerinden) kullanΔ±cΔ± bir etiketi dokundurup etiket yazΔ±ldΔ±ktan sonra Γ§ΓΆzΓΌlen veya DOMException ile reddedilen bir Promise. Gerekenler: derleme yaparken AdΔ±m 4'te (EriΕim) Web NFC DesteΔi aΓ§Δ±k olmalΔ±.
document.getElementById('write-table-tag').addEventListener('click', async function () {
if (!('NDEFReader' in window)) { showStatus('NFC is not available in this app.'); return; }
showStatus('Tap a tag to write it...');
try {
await new NDEFReader().write({
records: [
{ recordType: 'url', data: 'https://example.com/menu' },
{ recordType: 'text', data: 'Table 12', lang: 'en' },
{ recordType: 'mime', mediaType: 'application/json',
data: new TextEncoder().encode(JSON.stringify({ table: 12 })) }
]
});
showStatus('Tag written.');
} catch (err) {
showStatus('Write failed: ' + err.message);
}
});YalnΔ±zca boΕ bir etikete yazΔ±n, bΓΆylece veri iΓ§eren bir etiket yanlΔ±ΕlΔ±kla deΔiΕtirilmez:
async function writeToBlankTag(url) {
if (!('NDEFReader' in window)) { showStatus('NFC is not available in this app.'); return; }
showStatus('Tap a blank tag...');
try {
await new NDEFReader().write(
{ records: [{ recordType: 'url', data: url }] },
{ overwrite: false }
);
showStatus('Tag written.');
} catch (err) {
if (err.name === 'NotAllowedError') showStatus('That tag already holds data or is locked. Use a blank tag.');
else if (err.name === 'NetworkError') showStatus('Hold the tag still until it is written.');
else showStatus('Write failed: ' + err.message);
}
}AkΔ±llΔ± bir poster yazΔ±n; bir baΔlantΔ±yΔ± baΕlΔ±ΔΔ±yla birlikte tek bir kayΔ±t olarak:
document.getElementById('write-poster').addEventListener('click', async function () {
if (!('NDEFReader' in window)) { showStatus('NFC is not available in this app.'); return; }
showStatus('Tap a tag to write the poster...');
try {
await new NDEFReader().write({
records: [{
recordType: 'smart-poster',
data: { records: [
{ recordType: 'url', data: 'https://example.com/events/spring-fair' },
{ recordType: 'text', data: 'Spring Fair tickets', lang: 'en' }
] }
}]
});
showStatus('Poster tag written.');
} catch (err) {
showStatus(err.name === 'NotSupportedError' ? 'This tag is too small or cannot hold NFC data.' : 'Write failed: ' + err.message);
}
});Notlar: Polyfill kayΔ±tlarΔ± denetler, {records:[{recordType, id, data(base64), encoding, lang, mediaType, records?}], overwrite} biΓ§imine Γ§evirir ve JSON dizesini buraya iletir. Γaδrı bir iΕlem kimliΔi dΓΆndΓΌrΓΌr; sonuΓ§ sayfaya window.__appmintNfcDone(id, errorName, message) ΓΌzerinden geri gelir, bΓΆylece deΔiΕtirilmiΕ bir yazmanΔ±n yanΔ±tΔ± daha yeni bir yazmayΔ± asla sonuΓ§landΔ±rmaz. BiΓ§imlendirilmemiΕ etiketler ΓΆnce biΓ§imlendirilir. Reddedilme nedenleri: NotAllowedError ("Etiket salt okunur" veya overwrite false iken kayΔ±tlΔ± bir etiket), NotSupportedError ("Etiket NDEF desteklemiyor", "Etiket Γ§ok kΓΌΓ§ΓΌk (N bayt kullanΔ±labilir)"), NetworkError (etiket uzaklaΕtΔ±), SyntaxError (etiket biΓ§iminin tutamayacaΔΔ± bir kayΔ±t). Uygulama ayrΔ±ca kendi kΔ±sa "Yazmaya hazΔ±r" ve "NFC etiketi yazΔ±ldΔ±" mesajlarΔ±nΔ± gΓΆsterir.
startScan köprü#
window.AndroidNFC.startScan(): Boolean
Eski kullanΔ±labilirlik yoklamasΔ±; yalnΔ±zca oluΕturan kiΕi NFC'yi etkinleΕtirdiΔinde bulunur. GerΓ§ek NFC iΕleri standart NDEFReader polyfill'i (window.WebToApk.__nfc*) ΓΌzerinden yΓΌrΓΌr ve bir sayfanΔ±n kullanmasΔ± gereken budur; bu yalnΔ±zca adaptΓΆrΓΌn aΓ§Δ±k olup olmadΔ±ΔΔ±nΔ± bildirir.
Kendi baΕΔ±na deΔil, grubu Web NFC ΓΌzerinden aΓ§Δ±klanΔ±r.
Örnek
Telefonun NFC'sinin aΓ§Δ±k olup olmadΔ±ΔΔ±nΔ± sΓΆyler. window.AndroidNFC ΓΌzerindedir, window.WebToApk ΓΌzerinde deΔil ve bir etiketi okumaz β okuma Εununla yapΔ±lΔ±r NDEFReader.
DΓΆner deΔer: telefonda NFC varsa ve aΓ§Δ±ksa (eΕzamanlΔ± olarak) true; telefonda NFC yoksa veya NFC kapalΔ±ysa false (bu durumda uygulama ayrΔ±ca kΔ±sa bir "LΓΌtfen NFC'yi aΓ§Δ±n" mesajΔ± gΓΆsterir). Gerekenler: derleme yaparken AdΔ±m 4'te (EriΕim) Web NFC DesteΔi aΓ§Δ±k olmalΔ±; aksi halde window.AndroidNFC bulunmaz.
Bir NFC dΓΌΔmesi gΓΆstermeden ΓΆnce denetleyin:
function nfcReady() {
if (!window.AndroidNFC || typeof window.AndroidNFC.startScan !== 'function') return false;
return window.AndroidNFC.startScan();
}
document.getElementById('scan-tag').addEventListener('click', async function () {
if (!nfcReady()) { showStatus('Turn on NFC in the phone settings, then try again.'); return; }
var reader = new NDEFReader();
reader.addEventListener('reading', function (e) { showStatus('Tag ' + e.serialNumber); });
await reader.scan();
showStatus('Hold a tag to the back of the phone.');
});Yazmadan hemen ΓΆnce denetleyin: NFC kapalΔ±yken yazma hiΓ§ gelmeyecek bir dokunuΕu bekler, startScan() ise hemen yanΔ±t verir ve uygulamanΔ±n "LΓΌtfen NFC'yi aΓ§Δ±n" mesajΔ±nΔ± gΓΆsterir:
document.getElementById('write-pass').addEventListener('click', async function () {
if (!window.AndroidNFC || typeof window.AndroidNFC.startScan !== 'function') {
showStatus('NFC is not available in this app.');
return;
}
if (!window.AndroidNFC.startScan()) { showStatus('NFC is off, or this phone has no NFC.'); return; }
showStatus('Tap a tag to write it...');
try {
await new NDEFReader().write('Visitor pass #1042');
showStatus('Tag written.');
} catch (err) {
showStatus('Write failed: ' + err.message);
}
});KullanΔ±cΔ± geri dΓΆnΓΌp "AΓ§tΔ±m" dΓΌΔmesine dokunduΔunda yeniden denetleyin:
var retry = document.getElementById('nfc-retry');
retry.addEventListener('click', function () {
if (!window.AndroidNFC || typeof window.AndroidNFC.startScan !== 'function') {
showStatus('NFC is not available in this app.');
return;
}
if (window.AndroidNFC.startScan()) {
retry.hidden = true;
document.getElementById('nfc-panel').hidden = false;
startReading(); // your own NDEFReader.scan() code
} else {
showStatus('NFC is still off, or this phone has no NFC.');
}
});Notlar: window.AndroidNFC, sayfadaki ilk betikten itibaren vardΔ±r. KullanΔ±cΔ± ayarlardan NFC'yi aΓ§Δ±p geri dΓΆndΓΌΔΓΌnde etiket okuma kendiliΔinden baΕlar.