diff --git a/static/skin/viewer.js b/static/skin/viewer.js
index 2c3c80a14..98b4bf481 100644
--- a/static/skin/viewer.js
+++ b/static/skin/viewer.js
@@ -243,9 +243,10 @@ function matchingAncestorElement(el, context, selector) {
const block_path = `${root}/catch/external`;
-function blockLink(target) {
- const encodedHref = encodeURIComponent(target.href);
- target.setAttribute("href", block_path + "?source=" + encodedHref);
+function blockLink(url) {
+ return viewerSettings.linkBlockingEnabled
+ ? block_path + "?source=" + encodeURIComponent(url)
+ : url;
}
function isExternalUrl(url) {
@@ -262,10 +263,8 @@ function onClickEvent(e) {
const target = matchingAncestorElement(e.target, iframeDocument, "a");
if (target !== null && "href" in target) {
if ( isExternalUrl(target.href) ) {
- target.setAttribute("target", "_top");
- if ( viewerSettings.linkBlockingEnabled ) {
- return blockLink(target);
- }
+ target.setAttribute("href", blockLink(target.href));
+ contentIframe.contentWindow.parent.postMessage({ externalURL : target.href }, "*");
}
}
}
@@ -446,6 +445,13 @@ function changeUILanguage() {
});
}
+function handleMessage(event) {
+ console.log("handleMessage");
+ if ( event.data.externalURL ) {
+ window.location = event.data.externalURL;
+ }
+}
+
function setupViewer() {
// Defer the call of handle_visual_viewport_change() until after the
// presence or absence of the taskbar as determined by this function
@@ -453,6 +459,7 @@ function setupViewer() {
setTimeout(handle_visual_viewport_change, 0);
window.onresize = handle_visual_viewport_change;
+ window.addEventListener("message", handleMessage);
const kiwixToolBarWrapper = document.getElementById('kiwixtoolbarwrapper');
if ( ! viewerSettings.toolbarEnabled ) {
diff --git a/test/server.cpp b/test/server.cpp
index 961ef9a06..97e1c6e74 100644
--- a/test/server.cpp
+++ b/test/server.cpp
@@ -73,7 +73,7 @@ const ResourceCollection resources200Compressible{
{ DYNAMIC_CONTENT, "/ROOT%23%3F/skin/taskbar.css" },
{ STATIC_CONTENT, "/ROOT%23%3F/skin/taskbar.css?cacheid=bbdaf425" },
{ DYNAMIC_CONTENT, "/ROOT%23%3F/skin/viewer.js" },
- { STATIC_CONTENT, "/ROOT%23%3F/skin/viewer.js?cacheid=b9a574d4" },
+ { STATIC_CONTENT, "/ROOT%23%3F/skin/viewer.js?cacheid=d575e81a" },
{ DYNAMIC_CONTENT, "/ROOT%23%3F/skin/fonts/Poppins.ttf" },
{ STATIC_CONTENT, "/ROOT%23%3F/skin/fonts/Poppins.ttf?cacheid=af705837" },
{ DYNAMIC_CONTENT, "/ROOT%23%3F/skin/fonts/Roboto.ttf" },
@@ -312,7 +312,7 @@ R"EXPECTEDRESULT(
-
+
const blankPageUrl = root + "/skin/blank.html?cacheid=6b1fa032";