fix: defer Web Bluetooth check and implement mobile-specific print fallback for POS receipts
This commit is contained in:
parent
0f225a7bfb
commit
464bbc3067
@ -70,14 +70,6 @@ patch(PosPrinterService.prototype, {
|
|||||||
console.log('[BluetoothPrint] Element tag:', el?.tagName);
|
console.log('[BluetoothPrint] Element tag:', el?.tagName);
|
||||||
console.log('[BluetoothPrint] Element classes:', el?.className);
|
console.log('[BluetoothPrint] Element classes:', el?.className);
|
||||||
|
|
||||||
// Check if Web Bluetooth API is available
|
|
||||||
if (!navigator.bluetooth) {
|
|
||||||
console.log('[BluetoothPrint] Web Bluetooth API not available, using browser print dialog');
|
|
||||||
await this._printViaBrowserDialog(el);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
console.log('[BluetoothPrint] Web Bluetooth API available');
|
|
||||||
|
|
||||||
// Check if a Bluetooth printer is configured (from localStorage)
|
// Check if a Bluetooth printer is configured (from localStorage)
|
||||||
const storage = new BluetoothPrinterStorage();
|
const storage = new BluetoothPrinterStorage();
|
||||||
|
|
||||||
@ -101,6 +93,14 @@ patch(PosPrinterService.prototype, {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check if Web Bluetooth API is available
|
||||||
|
if (!navigator.bluetooth) {
|
||||||
|
console.log('[BluetoothPrint] Web Bluetooth API not available, using browser print dialog');
|
||||||
|
await this._printViaBrowserDialog(el);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
console.log('[BluetoothPrint] Web Bluetooth API available');
|
||||||
|
|
||||||
const config = storage.loadConfiguration(posConfigId);
|
const config = storage.loadConfiguration(posConfigId);
|
||||||
|
|
||||||
if (!config || !config.deviceId) {
|
if (!config || !config.deviceId) {
|
||||||
@ -196,6 +196,21 @@ patch(PosPrinterService.prototype, {
|
|||||||
async _printViaBrowserDialog(el) {
|
async _printViaBrowserDialog(el) {
|
||||||
console.log('[BluetoothPrint] Opening browser print dialog...');
|
console.log('[BluetoothPrint] Opening browser print dialog...');
|
||||||
|
|
||||||
|
// Detect if mobile OS (Android, iOS, etc.) or WebView where iframe printing doesn't work
|
||||||
|
const isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
|
||||||
|
|
||||||
|
if (isMobile) {
|
||||||
|
console.log('[BluetoothPrint] Mobile or WebView environment detected. Falling back to native printWeb on main window.');
|
||||||
|
try {
|
||||||
|
this.printWeb(el);
|
||||||
|
return true;
|
||||||
|
} catch (e) {
|
||||||
|
console.error('[BluetoothPrint] printWeb failed, calling window.print directly:', e);
|
||||||
|
window.print(el);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return new Promise((resolve) => {
|
return new Promise((resolve) => {
|
||||||
// Create a hidden iframe for printing
|
// Create a hidden iframe for printing
|
||||||
const printFrame = document.createElement('iframe');
|
const printFrame = document.createElement('iframe');
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user