欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JS如何顯示防盜鏈的外站圖片技巧示例

 更新時間:2023年09月28日 08:36:22   作者:jsoncode  
通常在開發(fā)測試環(huán)節(jié),一些資源圖片會出現(xiàn)防盜鏈的錯誤提示,本文就通過前端基礎(chǔ)技術(shù),實現(xiàn)基本的圖片跨站顯示效果,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

防盜鏈的原理

  • 服務(wù)端通過請求頭的request.headers.referer來判斷是否是自己資源白名單的請求來源。
  • 如果referer=null,則無法判斷來源,會正常顯示圖片。

所以基于以上理論,可以給圖片創(chuàng)造一個沒有referer的請求環(huán)境就可以實現(xiàn)了。

解決思路

通過iframe來實現(xiàn)無referer的請求環(huán)境。

實現(xiàn)過程

  • 創(chuàng)建一個base64臨時資源,供iframe調(diào)用
  • 在臨時資源中,請求圖片
  • 圖片加載完成后,修改iframe.height=img.height

源碼

base64臨時資源:

const src = 'http://test.com/test.png';
const html = `data:text/html;base64,${btoa(`<img src="${src}"/>`)}`
<iframe src="html"></iframe>

使用ResizeObserver監(jiān)聽圖片高度

由于當前iframe里只有一個圖片,所以監(jiān)聽body高度即可(body有默認margin,后面需要清除樣式)。(ResizeObserver API)

var ro = new ResizeObserver(entries => {
  for (let entry of entries) {
    const data = {height: entry.contentRect.height};
    window.parent?.postMessage({...data, window: 'parent'}, '*')
    window.top?.postMessage({...data, window: 'top'}, '*')
  }
})
ro.observe(document.body)
window.addEventListener("message", e => {
  if (e.data.window === 'parent') {
      iframe.style.height = e.data.height + 'px'
  }
}, false)

完整代碼 (vue3 setup ts)

<script setup lang="ts">
import { onMounted, ref, withDefaults } from 'vue'
interface IProps {
    src: string;
    id?: string
}
const props = withDefaults(defineProps<IProps>(), {});
const iframe = ref(null)
onMounted(() => {
    if (iframe.value) {
        const html = `<style>body{margin:0;}</style>
        <img src="${props.src}" style="display:block"/>
        <script>
            var ro = new ResizeObserver(entries => {
                for (let entry of entries) {
                    const data = {height: entry.contentRect.height, id: "${props.id || props.src}"};
                    window.parent?.postMessage({...data, window: 'parent'}, '*')
                    window.top?.postMessage({...data, window: 'top'}, '*')
                }
            })
            ro.observe(document.body)
        <\/script>`
        iframe.value.src = `data:text/html;base64,${btoa(html)}`
    }
    window.addEventListener("message", e => {
        if (e.data.window === 'parent' && e.data.id === props.src && iframe.value) {
            iframe.value.style.height = e.data.height + 'px'
        }
    }, false)
})
</script>
<template>
    <iframe ref="iframe" style="display: block; border: 0;"></iframe>
</template>

以上就是JS如何顯示防盜鏈的外站圖片的詳細內(nèi)容,更多關(guān)于JS顯示防盜鏈的外站圖片的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • JavaScript 應(yīng)用類庫代碼

    JavaScript 應(yīng)用類庫代碼

    S.Sams Lifexperience CopyRight (C) 2003-2007 S.Sams Lifexperience ScriptClassLib MSNLive: S.Sams#msn.com Update by : 2007-01-19 轉(zhuǎn)載傳播請保留版權(quán)
    2008-06-06
  • JavaScript結(jié)合HTML DOM實現(xiàn)聯(lián)動菜單

    JavaScript結(jié)合HTML DOM實現(xiàn)聯(lián)動菜單

    這篇文章主要為大家詳細介紹了JavaScript結(jié)合HTML DOM實現(xiàn)聯(lián)動菜單,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • JS中遞歸函數(shù)

    JS中遞歸函數(shù)

    編程語言中,函數(shù)Func(Type a,……)直接或間接調(diào)用函數(shù)本身,則該函數(shù)稱為遞歸函數(shù)。遞歸函數(shù)不能定義為內(nèi)聯(lián)函數(shù)。這篇文章主要介紹了JS中遞歸函數(shù)的相關(guān)資料,需要的朋友可以參考下
    2016-06-06
  • JavaScript實現(xiàn)簡單隨機點名器

    JavaScript實現(xiàn)簡單隨機點名器

    這篇文章主要為大家詳細介紹了JavaScript實現(xiàn)簡單隨機點名器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • js去空格技巧分別去字符串前后、左右空格

    js去空格技巧分別去字符串前后、左右空格

    js去空格想必大家多少都會點吧,在接下來的文章中為大家詳細介紹下如何分別去字符串前后,左邊,右邊空格,感興趣的朋友可以參考下
    2013-10-10
  • javascript 避免閉包引發(fā)的問題

    javascript 避免閉包引發(fā)的問題

    閉包的功能強大,但如果沒有正確理解閉包的概念,其結(jié)果往往出乎人的意料。例如,下面是一個較常見的問題
    2009-03-03
  • js 日期轉(zhuǎn)換成中文格式的函數(shù)

    js 日期轉(zhuǎn)換成中文格式的函數(shù)

    最近的項目需要將日期轉(zhuǎn)換成中文的格式,于是寫了個小小的JS函數(shù),使用時直接調(diào)用即可.
    2009-07-07
  • 悟透JavaScript整理版

    悟透JavaScript整理版

    編程世界里只存在兩種基本元素,一個是數(shù)據(jù),一個是代碼。編程世界就是在數(shù)據(jù)和代碼千絲萬縷的糾纏中呈現(xiàn)出無限的生機和活力。
    2008-03-03
  • 最新評論