- From: OlivierGrenoble via GitHub <sysbot+gh@w3.org>
- Date: Thu, 19 Mar 2020 15:23:32 +0000
- To: public-web-nfc@w3.org
> > Here is a screencast (in a zip file). > > I have clicked on "Write NFC Tag", then on "Write URI", then I have taped the NFC Tag. > > The URI is written successfully. As you can see, I immediately gets a notification to open the URI in Chrome. > > Based on the video I would say things work as they are designed to work (*) and also according to your [preference](https://github.com/w3c/web-nfc/issues/551#issuecomment-601024359) to not interfere with other apps on reading. I confirm. I have started a scan, then moved to another Chrome Tab and then taped a tag. The native processing is executed so that's fine. > > (*) But IIUC you would prefer that Web NFC implementation would create and "own" a sort of "tag writing session" in a way that re-reading that tag would get dispatched to Web NFC and discarded there? Yes and I was proposing to make it the default behavior. > Of course the app could do that by: > > * setting up a scan > * write with `ignoreRead=true` > * ignoring the read event. > But I understood that was not your preference, right? This is not easy to do. For the moment I haven't succeed to get a version working reliably. Here is my code. I had to use ignoreRead=false in order to be sure that the NFC event get hooked by my application and doesn't get processed natively. ``` function writeUriNdef(uriTxt) { console.log("writeUriNdef: " + uriTxt); if (!('NDEFWriter' in window)) { showWebNfcWarning(); return; } if (!window.isSecureContext) { showSecureContextWarning(); return; } var message = { records : [ { recordType: "url", data: uriTxt } ] }; console.log("Please tap the NFC tag to write..."); showDialog("Please tap the NFC tag to write...", "", cancelPushRequest); writerAbortController = new AbortController(); writerAbortController.signal.onabort = event => { console.log("All NFC Write operations have been aborted."); }; readerAbortController = new AbortController(); readerAbortController.signal.onabort = event => { console.log("All NFC Read operations have been aborted."); }; const reader = new NDEFReader(); const writer = new NDEFWriter(); reader.scan({ signal: readerAbortController.signal }) .then(() => { reader.onreading = event => { console.log("NFC read event ignored (write in progress)"); }; }).catch(error => { console.log("Read failed: " + error.name); }); writer.write(message, { signal: writerAbortController.signal , ignoreRead: false }) .then(() => { console.log("NDEF written successfully."); showDialog("NDEF written successfully."); readerAbortController.abort(); }) .catch((error) => { console.log("error: " + error.name); switch(error.name) { case "NotSupportedError": showDialog('Please turn NFC ON'); break; case "AbortError": //showDialog('Abort error'); break; default: showDialog('Push Failed, please try again: ' + error.name); break; } }); } function cancelPushRequest() { console.log("cancelPushRequest"); writerAbortController.abort(); readerAbortController.abort(); } ``` Here is the console: script.js:413 writeUriNdef: http://www.st.com/st25 script.js:434 Please tap the NFC tag to write... script.js:453 NFC read event ignored (write in progress) script.js:461 NDEF written successfully. script.js:484 cancelPushRequest script.js:439 All NFC Write operations have been aborted. script.js:444 All NFC Read operations have been aborted. "NFC read event ignored" has been called, which is fine but I still get the native processing. > Now IIUC @kenchris, the intent with `ignoreRead` was actually that behaviour (in which case we need to update the write algorithm and don't need another write option). 2 years ago, I was using the previous WebNFC API and I didn't have this problem. I was using ignoreRead=true and I think that it was discarding the read event. -- GitHub Notification of comment by OlivierGrenoble Please view or discuss this issue at https://github.com/w3c/web-nfc/issues/551#issuecomment-601240977 using your GitHub account
Received on Thursday, 19 March 2020 15:23:33 UTC