Skip to content

Commit 9f89b8b

Browse files
committed
Enhance PDFViewer for Chrome mobile: Implemented detection for Chrome mobile browsers to hide the PDF iframe and display a fallback message, improving user experience on mobile devices. Added relevant data attributes for better handling of mobile-specific behavior.
1 parent f0b48a8 commit 9f89b8b

1 file changed

Lines changed: 22 additions & 0 deletions

File tree

src/components/PDFViewer.astro

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,16 @@ const {
5151
document.addEventListener('DOMContentLoaded', function() {
5252
const wrappers = document.querySelectorAll('[data-pdf-wrapper]');
5353

54+
// Detect Chrome mobile (Chrome mobile intercepts PDFs and shows download prompt)
55+
const isChromeMobile = /Android.*Chrome|CriOS/i.test(navigator.userAgent) &&
56+
'ontouchstart' in window;
57+
5458
wrappers.forEach(wrapper => {
59+
// Mark Chrome mobile wrappers
60+
if (isChromeMobile) {
61+
wrapper.setAttribute('data-chrome-mobile', 'true');
62+
}
63+
5564
const iframe = wrapper.querySelector('[data-pdf-iframe]');
5665
const titleElement = wrapper.querySelector('[data-pdf-title]');
5766
const errorMessage = wrapper.querySelector('.pdf-error-message');
@@ -67,6 +76,11 @@ const {
6776
iframe.style.display = 'none';
6877
};
6978

79+
// On Chrome mobile, hide iframe immediately (it will show download prompt anyway)
80+
if (isChromeMobile) {
81+
iframe.style.display = 'none';
82+
}
83+
7084
// Check if PDF loads successfully
7185
iframe.addEventListener('load', () => {
7286
setTimeout(() => {
@@ -247,4 +261,12 @@ const {
247261
}
248262
}
249263
}
264+
265+
/* Chrome mobile: hide iframe (Chrome mobile intercepts PDFs and shows download prompt) */
266+
.pdf-viewer-wrapper[data-chrome-mobile] .pdf-frame {
267+
display: none !important;
268+
}
269+
.pdf-viewer-wrapper[data-chrome-mobile] .pdf-mobile-fallback {
270+
display: block !important;
271+
}
250272
</style>

0 commit comments

Comments
 (0)