????????微信公眾號(hào)分享出來(lái)的文章,基本上都設(shè)置了Content-Security-Policy,文章中的圖片也設(shè)置了防盜鏈功能,這就導(dǎo)致直接簡(jiǎn)單的引入iframe中會(huì)出錯(cuò)迷殿。
原因分析:
? ? ? ? 1、微信公眾號(hào)文章設(shè)置了Content-Security-Policy:frame-ancestors self https://xxx.com 咖杂,這就相當(dāng)于服務(wù)器告訴瀏覽器:如果某個(gè)頁(yè)面想通過(guò)iframe引用微信公眾號(hào)文章庆寺,那么這個(gè)頁(yè)面的域名得跟文章鏈接的域名一致,否則不允許引用诉字。
????????2懦尝、文章中的圖片設(shè)置了防盜鏈功能。如果通過(guò)非微信相關(guān)的瀏覽器打開壤圃,部分圖片也將無(wú)法顯示陵霉。這也是由于微信設(shè)置了跨域的限制。
解決方案:
????????既然是由于域名的原因?qū)е聼o(wú)法引用埃唯,那么就想辦法使用自己的域名。思路就是通過(guò)file_get_contents獲取微信公眾號(hào)文章的html內(nèi)容鹰晨,將其中所有的data-src替換為src(文章圖片的url設(shè)置在data-src中)墨叛,然后將所有圖片的URL拼接成一個(gè)本地域名下的一個(gè)地址,文章加載圖片的時(shí)候模蜡,再通過(guò)file_get_contents獲取圖片的內(nèi)容漠趁,返回給前端。這樣就能完整的加載微信公眾號(hào)的文章了忍疾,如果設(shè)置了CND回源闯传,加載會(huì)更快。文字說(shuō)的再多都不如幾行代碼解釋的清楚卤妒,上代碼甥绿。
html:
php:
以上是解決方案的核心代碼,大家根據(jù)自己的框架做一些調(diào)整就能正常使用了则披。以上是個(gè)人實(shí)踐過(guò)行之有效的方法共缕,歡迎大家批評(píng)指正。