????????微信公眾號分享出來的文章,基本上都設(shè)置了Content-Security-Policy,文章中的圖片也設(shè)置了防盜鏈功能,這就導致直接簡單的引入iframe中會出錯。
原因分析:
? ? ? ? 1、微信公眾號文章設(shè)置了Content-Security-Policy:frame-ancestors self https://xxx.com ,這就相當于服務(wù)器告訴瀏覽器:如果某個頁面想通過iframe引用微信公眾號文章,那么這個頁面的域名得跟文章鏈接的域名一致,否則不允許引用。
????????2、文章中的圖片設(shè)置了防盜鏈功能。如果通過非微信相關(guān)的瀏覽器打開,部分圖片也將無法顯示。這也是由于微信設(shè)置了跨域的限制。
解決方案:
????????既然是由于域名的原因?qū)е聼o法引用,那么就想辦法使用自己的域名。思路就是通過file_get_contents獲取微信公眾號文章的html內(nèi)容,將其中所有的data-src替換為src(文章圖片的url設(shè)置在data-src中),然后將所有圖片的URL拼接成一個本地域名下的一個地址,文章加載圖片的時候,再通過file_get_contents獲取圖片的內(nèi)容,返回給前端。這樣就能完整的加載微信公眾號的文章了,如果設(shè)置了CND回源,加載會更快。文字說的再多都不如幾行代碼解釋的清楚,上代碼。
html:

php:


以上是解決方案的核心代碼,大家根據(jù)自己的框架做一些調(diào)整就能正常使用了。以上是個人實踐過行之有效的方法,歡迎大家批評指正。