国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

如何應對Chrome 112版本中的getDisplayMedia問題?

系統 瀏覽器
當我在瀏覽器中調試修復截圖插件的其他bug時,發現截取的內容出現了滾動條,這讓我感到非常詫異。難道是我在解決某個問題的同時引發了更多問題。

前言

前幾天chrome發布了112版本,原本可以通過getDisplayMedia正確的獲取當前標簽頁的內容,在此版本中卻出現了內容擠壓、概率性出現滾動條問題。

經過一番思考后,我想到了兩個處理方案,本文就跟大家分享下我的思路,歡迎各位感興趣的開發者閱讀本文。

定位問題

當我在瀏覽器中調試修復截圖插件的其他bug時,發現截取的內容出現了滾動條,這讓我感到非常詫異。難道是我在解決某個問題的同時引發了更多問題。于是,我嘗試回退代碼版本,但問題仍然存在,這使我陷入了沉思,開始求助別人、在搜索引擎尋找解決方案。

經過一番折騰后,我沒有得到任何答案。就在這時,有一個開發者在給我提了issue,他也遇到了同樣的問題。

圖片

他提供了瀏覽器版本號,這讓我恍然大悟,不久前我升級了瀏覽器版本并且版本號跟他的一樣,同為112版本。

圖片

為了驗證是否為瀏覽器升級所帶來的bug,我在虛擬機中安裝了110版本的chrome,發現這個問題確實不存在。難不成是Google改了API?我帶著這個疑問翻閱了getDisplayMedia的API文檔,并沒有發現有什么特殊說明。

事情陷入了僵局,我又陷入了沉思。突然間,我想起來之前有個網友說Google自家也有產品用到了這個API,找他要來了網址。

圖片

果然,他們產品也出現了問題。

圖片

截取后的內容出現了擠壓和滾動條

圖片

解決方案

Chrome在下個版本的更新中可能會解決此問題,也有可能不會解決。這是個未知數,我還是得想想其他辦法來處理處理這個問題。

隱藏滾動條并填充擠壓區域

最簡單粗暴的辦法就是在調用getDisplayMedia方法之前將頁面的寬、高分別設為100vw、100vh,給html和body元素設置overflow:hidden。部分代碼如下所示:

// 設置頁面寬高并隱藏滾動條
document.documentElement.classList.add("hidden-screen-shot-scroll");
document.body.classList.add("hidden-screen-shot-scroll");
.hidden-screen-shot-scroll {
  width: 100vw;
  height: 100vh;
  overflow: hidden;
}

這樣設置后,又出現了新的問題,因為截圖容器的高度為body區域未擠壓時的正確高度,webrtc的共享彈窗會把頁面內容整體擠下去。

圖片

getDisplayMedia的回調里拿到的屏幕流數據是擠壓后的,底部會缺少一部分,這部分內容正好是共享彈窗的高度。當用戶想截取這部分的內容時,會發現拿到的是透明的。

圖片

為了解決這個問題,我想到了將這一部分用其他顏色填充,告訴用戶這部分不是截圖內容,部分代碼如下所示:

if (
    this.hiddenScrollBar.state &&
    diffHeight > 0 &&
    this.hiddenScrollBar.fillState
) {
    // 填充容器的剩余部分
    imgContext.beginPath();
    let fillWidth = containerWidth;
    let fillHeight = diffHeight;
    if (this.hiddenScrollBar.fillWidth > 0) {
        fillWidth = this.hiddenScrollBar.fillWidth;
    }
    if (this.hiddenScrollBar.fillHeight > 0) {
        fillHeight = this.hiddenScrollBar.fillHeight;
    }
    imgContext.rect(0, fixHeight, fillWidth, fillHeight);
    imgContext.fillStyle = this.hiddenScrollBar.color;
    imgContext.fill();
}

使用窗口截圖模式

通過上個章節的分析,我們發現使用標簽頁截圖時出現擠壓的根本原因在于共享彈窗會出現在頁面的頂部。那么,有沒有什么辦法能做到不讓這個共享彈窗出現在最頂部呢?

帶著這個疑問,我在chrome的開發文檔中找到了displaySurface選項,將這個值設為window,它的共享彈窗就不會出現了。部分代碼如下所示:

let mediaWidth = window.screen.width * this.dpr;
let mediaHeight = window.screen.height * this.dpr;
navigator.mediaDevices.getDisplayMedia({
    audio: false,
    video: {
        width: mediaWidth,
        height: mediaHeight,
        displaySurface: "window"
    }
});

圖片

網頁標題欄會出現錄制圖標

圖片

但是,這樣子做我們拿到的是整個瀏覽器窗口的截圖,我們想要的是body區域的截圖內容。 因此,還需要對截圖內容做進一步的裁剪處理,我們可以知道瀏覽器窗口的寬高、body區域的寬高。那么,用瀏覽器窗口的寬高減去body區域的寬高,我們就拿到了body區域的裁剪坐標。部分代碼如下所示:

/**
   * 從窗口數據流中截取頁面body內容
   * @param videoWidth 窗口寬度
   * @param videoHeight 窗口高度
   * @param containerWidth body內容寬度
   * @param containerHeight body內容高度
   * @private
   */
  private getWindowContentData(
    videoWidth: number,
    videoHeight: number,
    containerWidth: number,
    containerHeight: number
  ) {
    const videoCanvas = document.createElement("canvas");
    videoCanvas.width = videoWidth;
    videoCanvas.height = videoHeight;
    const videoContext = getCanvas2dCtx(videoCanvas, videoWidth, videoHeight);
    if (videoContext) {
      videoContext.drawImage(this.videoController, 0, 0);
      const startX = 0;
      const startY = videoHeight - containerHeight;
      const width = containerWidth;
      const height = videoHeight - startY;
      // 獲取裁剪框區域圖片信息;
      return videoContext.getImageData(
        startX * this.dpr,
        startY * this.dpr,
        width * this.dpr,
        height * this.dpr
      );
    }
    return null;
  }

思考與分析

使用當前標簽頁進行截圖相對而言用戶體驗是最好的,但是因為chrome 112版本的bug會造成頁面內容擠壓導致截取到的內容不完整,因此只能采用其他方案來解決此問題了。窗口截圖模式和隱藏滾動條都可以解決這個問題,但是他們都有缺點:

  • 窗口截圖模式可以完美的獲取屏幕截圖,但是用戶授權時會出現其他的應用程序選項,用戶體驗會差一些。
  • 隱藏滾動條方案還是采用標簽頁截圖,但是會造成內容擠壓,底部出現空白。

這兩種方案都是不完美的,希望Chrome能在后續的版本更新中修復此問題。窗口模式截圖我有找過能否讓授權列表中只包含當前窗口選項,我在Chrome的開發文檔中找到了Google對此情況的解釋。

圖片

項目地址

本文所列舉的代碼完整內容請移步:

  • hiddenScrollBar-main.ts
  • wrcWindowMode-main.ts
  • getWindowContentData-main.ts
責任編輯:武曉燕 來源: 神奇的程序員
相關推薦

2011-05-18 09:23:00

Chrome OS

2017-03-21 11:42:29

Linux安裝Python 3.6

2023-06-26 07:47:09

2009-12-14 15:36:19

Visual Stud

2012-11-16 09:50:32

Windbg

2009-11-23 09:22:22

Chrome OSlinux內核

2009-12-14 13:22:50

VS2008版本

2015-07-27 16:48:57

PPT文檔

2021-09-23 16:47:12

Chrome谷歌瀏覽器

2020-12-16 10:42:21

人工智能智能建筑IoT

2022-10-09 12:12:37

配置漂移

2010-06-08 09:45:27

openSUSE 11

2012-05-07 23:45:54

FantomJavaJVM

2012-03-06 13:45:43

JavaJActor

2025-10-16 09:37:11

2010-09-27 12:42:15

JVM1.4.1JVM垃圾收集

2015-09-30 10:29:07

VDI

2015-09-28 10:12:13

VDI虛擬化

2018-12-18 14:15:27

Windows 10語言版本錯誤

2020-07-10 06:40:31

Python 3.9Python開發
點贊
收藏

51CTO技術棧公眾號

国产丝袜美腿一区二区三区| 免费的国产精品| 中文在线日韩| 韩国精品免费视频| 综合色中文字幕| 欧美一区二区福利在线| 欧美日韩国产成人| 91美女片黄在线观| 777久久精品一区二区三区无码| 国产成人成网站在线播放青青| 激情五月综合色婷婷一区二区| 中国成人在线视频| 日本一二三区视频免费高清| 日本在线观看视频| 国产精品网在线观看| 久久精品麻豆| 亚洲久草在线视频| 亚洲国产欧美一区二区丝袜黑人 | 欧美/亚洲一区| 国产日韩精品一区二区浪潮av| 欧美精品三级在线观看| 国产精品扒开腿爽爽爽视频| 成人小视频在线观看免费| 视频三区在线| 欧美3p视频| 中文字幕在线观看不卡视频| 国产午夜精品理论片a级探花| av激情久久| 白白色在线发布| 久久成人福利| 99精品欧美一区二区三区小说| 91精品国产综合久久精品性色| 成人激情综合网| 影音先锋在线影院| 另类图片第一页| 久久久久综合网| 中文字幕无线精品亚洲乱码一区| 奇米精品在线| 性xxxfreexxxx性欧美| 自拍偷拍欧美| 日韩欧美在线播放| 日韩美女视频免费看| 8x8x视频在线| 任我爽精品视频在线播放| 欧美极品xxx| 国内精品久久久久伊人av| 日本爱爱免费视频| 韩国女主播一区二区三区| 国产精品二区一区二区aⅴ污介绍| 欧美激情视频在线观看| 九色porny自拍| 精品日产免费二区日产免费二区| 亚洲一区二区不卡免费| 国产欧美一区二区三区在线看| 黄色一级视频片| 大胆av不用播放器在线播放 | 在线观看av黄网站永久| 日韩欧美精品一区| 中文字幕亚洲在| 最近2019中文免费高清视频观看www99 | 久久综合久久综合久久| 色婷婷av一区二区三区在线观看 | 久久综合久久综合久久综合| 亚洲高清久久网| 视频一区亚洲| 大胆人体一区二区| 91麻豆精品秘密| 欧美大学生性色视频| 欧美s码亚洲码精品m码| 99精品中文字幕在线不卡| 91污片在线观看| 日本成人黄色片| av在线三区| 不卡的av电影| 91av成人在线| 最新av电影| 天堂网在线观看国产精品| 欧美午夜一区二区三区 | 久久91超碰青草在哪里看| 亚洲精品久久久久久国产精华液| 日韩av手机在线| 免费播放片a高清在线观看| 日韩视频一区| 亚洲欧美中文日韩在线| 欧美激情 国产精品| 久久久伦理片| 亚洲精品一区二区三区在线观看 | 日韩欧美亚洲综合| 欧美日韩中文字幕在线播放| 精品国内自产拍在线观看视频| 精品福利一二区| 黄网站色大毛片| 亚洲欧美高清| 久久久久久国产精品三级玉女聊斋| 最新国产在线视频| 日本在线观看不卡视频| 欧美黑人国产人伦爽爽爽| 国产福利小视频在线观看| 国产成人av电影在线观看| 国产成人一区二区三区| 操喷在线视频| 亚洲成a天堂v人片| 人妻夜夜添夜夜无码av| 小处雏高清一区二区三区| 亚洲视频在线播放| 中文字幕亚洲精品视频| 国产乱子伦一区二区三区国色天香| 欧美成在线视频| 国产精品高清乱码在线观看| 欧美性少妇18aaaa视频| 成人羞羞国产免费网站| 视频一区免费在线观看| 国产精品久久久久久网站 | 日本丶国产丶欧美色综合| 我看黄色一级片| 国模大尺度一区二区三区| 国产精品亚洲自拍| 91成人抖音| 亚洲精品成人免费| 老司机精品视频在线观看6| 黄色成人在线播放| 国产情侣av自拍| 国产suv一区二区三区88区| 欧美黑人3p| 欧美国产综合| 91成人天堂久久成人| 视频免费一区二区| 日韩专区在线播放| 88xx成人免费观看视频库| 日韩一卡二卡三卡国产欧美| 一本大道香蕉8中文在线视频| 国产精品国产精品国产专区不蜜 | 美女久久精品| 在线观看国产欧美| 不卡专区在线| 欧美mv日韩mv亚洲| 91网在线播放| 色综合久久久久久久久| 亚洲日本一区二区三区在线观看| 国产欧美日韩在线| 男女人搞j网站| 国产精品久久久久久户外露出| 大j8黑人w巨大888a片| av动漫一区二区| 中文字幕乱码人妻综合二区三区| 久久免费视频色| 尤蜜粉嫩av国产一区二区三区| 国产精品私人自拍| 成人亚洲一区二区三区| 欧美三级免费观看| 午夜成年人在线免费视频| 亚洲乱码一区二区| 99国内精品久久久久| 国内精品久久久久影院 日本资源| 久久免费大视频| 欧美一区二区三区四区在线观看地址 | 午夜日韩影院| 欧美国产亚洲精品久久久8v| 日日夜夜精品视频| 91av视频在线免费观看| 99久久www免费| 狠狠色伊人亚洲综合网站色| 热久久免费视频| 中国女人做爰视频| 91网址在线看| 女人裸体免费网站| 欧美日韩精品一二三区| 成人av免费| 久久久精品日本| 夜色77av精品影院| 99re在线国产| 成人精品一区二区三区中文字幕| 国产福利视频在线播放| 亚洲精品乱码久久久久久久久 | 久久久国际精品| 在线一级视频| 精品电影一区二区三区| 精品国产一区二| 2019av中文字幕| 国产日韩1区| 色琪琪原网站亚洲香蕉| 欧美日韩免费观看一区二区三区 | 99国产精品视频免费观看一公开 | xxxcom在线观看| 久久久免费观看| 三级成人在线视频| 一二三四社区在线视频6| 欧美v国产在线一区二区三区| 国产精品成人3p一区二区三区| 国产日本一区二区三区| 国产成人午夜高潮毛片| 污黄视频在线看| 久久久av一区| 好看不卡的中文字幕| 欧在线一二三四区| 欧美va亚洲va| 另类ts人妖一区二区三区| 老子影院午夜伦不卡大全| 91精品国产综合久久精品app| 日本午夜大片a在线观看|