Using a custom browser extension

0
0

Hi!

I’ve created a browser extension which uses NativeMessaging to communicate with my NFC reader. This extension works when I use the attached test html page. But now I want to use this in my WiseJ project. I’ve tried reading the manual but I’m at a loss. This seems quite easy but I cannot get it to work….

 

The script in the Attached HTML file has this:

<script>
let extensionInstalled = false;

// Functie om de extensie te controleren
function checkExtensionInstalled() {
return new Promise((resolve, reject) => {
// Stuur een bericht naar het content script
window.postMessage({ type: ‘CHECK_EXTENSION’ }, ‘*’);

// Wacht op een antwoord
function handleMessage(event) {
if (event.source !== window) return;

if (event.data && event.data.type === ‘EXTENSION_INSTALLED’) {
extensionInstalled = true;
window.removeEventListener(‘message’, handleMessage);
resolve(true);
}
}

window.addEventListener(‘message’, handleMessage);

// Stel een timeout in
setTimeout(() => {
if (!extensionInstalled) {
window.removeEventListener(‘message’, handleMessage);
resolve(false);
}
}, 1000); // Timeout na 1 seconde
});
}

// Functie om een bericht te sturen naar de content script
function startNativeApp() {
if (!extensionInstalled) {
alert(‘Extensie is niet geïnstalleerd.’);
return;
}

// Schakel de knop uit tijdens de verwerking
document.getElementById(‘start-button’).disabled = true;
document.getElementById(‘response’).textContent = ‘Bezig met verwerken…’;

// Stuur een bericht naar de content script
window.postMessage({ type: ‘START_NATIVE_APP’ }, ‘*’);
}

// Luister naar berichten van de content script
window.addEventListener(‘message’, function(event) {
// Controleer de oorsprong van het bericht
if (event.source !== window) {
return;
}

if (event.data.type === ‘NATIVE_APP_STATUS’) {
console.log(‘Extensie reactie:’, event.data.status);
}

if (event.data.type === ‘NATIVE_APP_RESPONSE’) {
// Toon het antwoord op de pagina
document.getElementById(‘response’).textContent = ‘Antwoord van native app: ‘ + event.data.data;

// Schakel de knop weer in
document.getElementById(‘start-button’).disabled = false;
}
}, false);

// Controleer bij het laden van de pagina of de extensie is geïnstalleerd
window.addEventListener(‘DOMContentLoaded’, async () => {
const installed = await checkExtensionInstalled();
if (installed) {
console.log(‘Extensie is geïnstalleerd.’);
document.getElementById(‘extension-status’).textContent = ”;
document.getElementById(‘start-button’).disabled = false;
} else {
console.log(‘Extensie is niet geïnstalleerd.’);
document.getElementById(‘extension-status’).textContent = ‘Extensie is niet geïnstalleerd.’;
document.getElementById(‘start-button’).disabled = true;
}
});
</script>

This shows that the page checks if the extension is installed and if it is, it enables a test button. How can I get this to work within a WiseJ page or even better, in a UserControl?

Any help would be soo greatly appreciated!

 

Thanks in advance!

 

PS

As I cannot upload the html file as it is not allowed, here is the source:

<!DOCTYPE html>
<html lang=”nl”>
<head>
<meta charset=”UTF-8″>
<title>TestNFC Extension Testpagina</title>
<style>
#response {
margin-top: 20px;
font-weight: bold;
}

#extension-status {
color: red;
font-weight: bold;
}

#start-button:disabled {
background-color: #ccc;
cursor: not-allowed;
}
</style>
<script>
let extensionInstalled = false;

// Functie om de extensie te controleren
function checkExtensionInstalled() {
return new Promise((resolve, reject) => {
// Stuur een bericht naar het content script
window.postMessage({ type: ‘CHECK_EXTENSION’ }, ‘*’);

// Wacht op een antwoord
function handleMessage(event) {
if (event.source !== window) return;

if (event.data && event.data.type === ‘EXTENSION_INSTALLED’) {
extensionInstalled = true;
window.removeEventListener(‘message’, handleMessage);
resolve(true);
}
}

window.addEventListener(‘message’, handleMessage);

// Stel een timeout in
setTimeout(() => {
if (!extensionInstalled) {
window.removeEventListener(‘message’, handleMessage);
resolve(false);
}
}, 1000); // Timeout na 1 seconde
});
}

// Functie om een bericht te sturen naar de content script
function startNativeApp() {
if (!extensionInstalled) {
alert(‘Extensie is niet geïnstalleerd.’);
return;
}

// Schakel de knop uit tijdens de verwerking
document.getElementById(‘start-button’).disabled = true;
document.getElementById(‘response’).textContent = ‘Bezig met verwerken…’;

// Stuur een bericht naar de content script
window.postMessage({ type: ‘START_NATIVE_APP’ }, ‘*’);
}

// Luister naar berichten van de content script
window.addEventListener(‘message’, function(event) {
// Controleer de oorsprong van het bericht
if (event.source !== window) {
return;
}

if (event.data.type === ‘NATIVE_APP_STATUS’) {
console.log(‘Extensie reactie:’, event.data.status);
}

if (event.data.type === ‘NATIVE_APP_RESPONSE’) {
// Toon het antwoord op de pagina
document.getElementById(‘response’).textContent = ‘Antwoord van native app: ‘ + event.data.data;

// Schakel de knop weer in
document.getElementById(‘start-button’).disabled = false;
}
}, false);

// Controleer bij het laden van de pagina of de extensie is geïnstalleerd
window.addEventListener(‘DOMContentLoaded’, async () => {
const installed = await checkExtensionInstalled();
if (installed) {
console.log(‘Extensie is geïnstalleerd.’);
document.getElementById(‘extension-status’).textContent = ”;
document.getElementById(‘start-button’).disabled = false;
} else {
console.log(‘Extensie is niet geïnstalleerd.’);
document.getElementById(‘extension-status’).textContent = ‘Extensie is niet geïnstalleerd.’;
document.getElementById(‘start-button’).disabled = true;
}
});
</script>
</head>
<body>
<h1>TestNFC Extension Testpagina</h1>
<p id=”extension-status”></p>
<button id=”start-button” onclick=”startNativeApp()” disabled>Start Native App</button>
<div id=”response”></div>
</body>
</html>

  • You must to post comments
Showing 0 results
Your Answer

Please first to submit.