亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

防盜鏈的原理

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

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

解決思路

通過(guò)iframe來(lái)實(shí)現(xiàn)無(wú)referer的請(qǐng)求環(huán)境。

實(shí)現(xiàn)過(guò)程

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

源碼

base64臨時(shí)資源:

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

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

由于當(dāng)前iframe里只有一個(gè)圖片,所以監(jiān)聽(tīng)body高度即可(body有默認(rèn)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如何顯示防盜鏈的外站圖片的詳細(xì)內(nèi)容,更多關(guān)于JS顯示防盜鏈的外站圖片的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

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

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

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

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

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

    JS中遞歸函數(shù)

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

    JavaScript實(shí)現(xiàn)簡(jiǎn)單隨機(jī)點(diǎn)名器

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

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

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

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

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

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

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

    悟透JavaScript整理版

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