diff --git a/addons/website/static/src/client_actions/website_preview/website_preview.js b/addons/website/static/src/client_actions/website_preview/website_preview.js index 81d22757adc..da5c9631e3a 100644 --- a/addons/website/static/src/client_actions/website_preview/website_preview.js +++ b/addons/website/static/src/client_actions/website_preview/website_preview.js @@ -374,11 +374,14 @@ export class WebsitePreview extends Component { }, reloadIframe: false, }); - } else if (href && target !== '_blank' && !isEditing && this._isTopWindowURL(linkEl)) { - ev.preventDefault(); - browser.location.assign(href); - } else if (this.iframe.el.contentWindow.location.pathname !== new URL(href).pathname) { - this.websiteService.websiteRootInstance = undefined; + } else if (href && target !== '_blank' && !isEditing) { + if (this._isTopWindowURL(linkEl)) { + ev.preventDefault(); + browser.location.assign(href); + } else if (this.iframe.el.contentWindow.location.pathname !== new URL(href).pathname) { + // This scenario triggers a navigation inside the iframe. + this.websiteService.websiteRootInstance = undefined; + } } }); this.iframe.el.contentDocument.addEventListener('keydown', ev => { diff --git a/addons/website/static/tests/tours/website_click_tests.js b/addons/website/static/tests/tours/website_click_tests.js new file mode 100644 index 00000000000..8ee610d59b5 --- /dev/null +++ b/addons/website/static/tests/tours/website_click_tests.js @@ -0,0 +1,42 @@ +/** @odoo-module **/ + +import wTourUtils from 'website.tour_utils'; + +const cover = { + id: 's_cover', + name: 'Cover', +}; + +wTourUtils.registerWebsitePreviewTour('website_click_tour', { + test: true, + url: '/', +}, [ + { + content: "trigger a page navigation", + trigger: 'iframe a[href="/contactus"]', + }, + { + content: "wait for the page to be loaded", + trigger: '.o_website_preview[data-view-xmlid="website.contactus"]', + run: () => null, // it's a check + }, + wTourUtils.clickOnEdit(), + { + content: "wait for edition to be started", + trigger: 'iframe body.editor_enable', + run: () => null, // it's a check + }, + { + content: "click on a link that would trigger navigation", + trigger: 'iframe a[href="/"]', + }, + wTourUtils.goBackToBlocks(), + wTourUtils.dragNDrop(cover), + wTourUtils.clickOnSnippet(cover), + ...wTourUtils.clickOnSave(), + { + content: "wait for the iframe to be ready", + trigger: 'iframe body:not(.editor_enable)', + run: () => null, // it's a check + } +]); diff --git a/addons/website/tests/test_ui.py b/addons/website/tests/test_ui.py index 48b0eed761a..5fb5ae44baa 100644 --- a/addons/website/tests/test_ui.py +++ b/addons/website/tests/test_ui.py @@ -404,3 +404,6 @@ class TestUi(odoo.tests.HttpCase): def test_26_website_media_dialog_icons(self): self.start_tour("/", 'website_media_dialog_icons', login='admin') + + def test_27_website_clicks(self): + self.start_tour('/web', 'website_click_tour', login='admin')