如何在全局打開iframe中的元素(例如圖片)

有個(gè)需求,要求將iframe中的圖片在當(dāng)前窗口居中打開,要求:
1、不能依賴父頁面提供相關(guān)方法;
2、打開后圖片以外的部分不能是黑底,可以透明或半透明;

方案:

  • 方案1:
方案 弊端
通過js將相關(guān)圖片插入body,并通過設(shè)置樣式(例如display: fixed),使其居中展示 無法突破iframe,在整個(gè)窗口居中顯示
通過requestFullscreen方法,將圖片或圖片容器打開 背景色無法設(shè)置為透明
通過window.open方法打開一個(gè)窗口,控制窗口位置和大小來實(shí)現(xiàn)居中展示,具體代碼邏輯如下 無法去掉小窗口的地址欄
let openedWindow = null;
function showImgByOpener() {
    // 事件委托,監(jiān)聽所有圖片點(diǎn)擊
    document.addEventListener('click', async (e) => {
        const target = e.target;
        if (target.tagName.toLowerCase() !== 'img') {
          if (openedWindow && !openedWindow.closed) {
            openedWindow.close();
            openedWindow = null;
          }
          return;
        };
        e.preventDefault(); // 禁止圖片拖拽
        
        const screenWidth = window.screen.width;
        const screenHeight = window.screen.height;

        // 定義新窗口尺寸
        const windowWidth = 600;
        const windowHeight = 400;

        // 計(jì)算新窗口的最佳位置
        const left = (screenWidth - windowWidth) / 2; // 居中
        const top = (screenHeight - windowHeight) / 2;

        const windowSpecs = `popup,width=${windowWidth},height=${windowHeight},left=${left},top=${top},scrollbars=no,resizable=no,location=no,menubar=no`;
        
        
        //const newWindow = window.open(target.src, '圖片預(yù)覽', windowSpecs);

        openedWindow = window.open('', '圖片預(yù)覽', windowSpecs);
        openedWindow.document.write(`<html><head><title>${target.name}圖片預(yù)覽</title></head><body>`);
        openedWindow.document.write(`<img src="${target.src}" width=${windowWidth - 20} height=${windowHeight - 20} alt="Image from iframe">`);
        openedWindow.document.write('</body></html>');
        openedWindow.document.close()
    });
}

showImgByOpener();
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • """1.個(gè)性化消息: 將用戶的姓名存到一個(gè)變量中,并向該用戶顯示一條消息。顯示的消息應(yīng)非常簡單,如“Hello ...
    她即我命閱讀 4,815評論 0 6
  • 1、expected an indented block 冒號后面是要寫上一定的內(nèi)容的(新手容易遺忘這一點(diǎn)); 縮...
    庵下桃花仙閱讀 1,053評論 1 2
  • 一、工具箱(多種工具共用一個(gè)快捷鍵的可同時(shí)按【Shift】加此快捷鍵選取)矩形、橢圓選框工具 【M】移動(dòng)工具 【V...
    墨雅丫閱讀 1,428評論 0 0
  • 跟隨樊老師和伙伴們一起學(xué)習(xí)心理知識提升自已,已經(jīng)有三個(gè)月有余了,這一段時(shí)間因?yàn)樘鞖獾脑蛐菡n,順便整理一下之前學(xué)習(xí)...
  • 一臉憤怒的她躺在了床上,好幾次甩開了他抱過來的雙手,到最后還堅(jiān)決的翻了個(gè)身,只留給他一個(gè)冷漠的背影。 多次嘗試抱她...
    海邊的藍(lán)兔子閱讀 946評論 1 4

友情鏈接更多精彩內(nèi)容