检测是否从javascript启用了移动Chrome的数据保存功能

时间:2017-04-05 09:03:28

标签: javascript google-chrome mobile-chrome chrome-datasaver

在Android设备上的移动设备上,有一个名为“数据保存”的设置,可从设置>访问数据保存。

启用后,在阅读媒体时行为可能略有不同,特别是视频:禁止移动自动播放视频,除非视频已静音但如果启用了数据保存,则不再允许静音自动播放。

我需要一种方法来检测是否使用了数据保存,这样我就可以改变我的视频播放器行为。

我知道在http请求中发送了一个标头:“save-data:on” 但我不知道从javascript读取http请求标头的任何方法。

更多信息: https://developer.chrome.com/multidevice/data-compression

感谢您的回答。

4 个答案:

答案 0 :(得分:2)

用于检测chrome数据保护程序模式的JavaScript方法

if('connection' in navigator){
 if(navigator.connection.saveData){
  console.log(`Your save data mode is = ${navigator.connection.saveData}`)
 }else{
  console.log(`Your save data mode is = ${navigator.connection.saveData}`)
 }
}

有关更多详细信息,请关注Google开发人员博客文章,Delivering fast and light applications with Save-Data

答案 1 :(得分:0)

我刚刚找到了一点解决方案。在PHP中有一些ENV变量。我通过一些随机调试发现env变量中有一个变量 HTTP_SAVE_DATA 。所以我的代码看起来像这样:

<?php
if ($_ENV["HTTP_SAVE_DATA"] == "on"){
  echo "Datasaver on"; 
}else{
  echo "Datasaver off"; 
}
?>

希望它适合你:)

(你只需要将它回显到一个js变量中,你可以通过js访问它)

答案 2 :(得分:-1)

我已使用此PHP检查data-saver是否已启用

/* 
* This is PHP Code 
* will not work on clicking "Run Code Snippet" 
* Host this code on php server as .php file 
*/

<?php
header('Content-Type: application/json');
$headers =  getallheaders();
$datasaver = false;
foreach($headers as $key=>$val){
    if(strtolower($key) == 'save-data' && $val == 'on'){
        $datasaver = true;
    }
}

$status = array('data-saver'=>$datasaver);

echo json_encode($status);

?>

data-saver打开时,网站的行为会有所不同,并且无法通过javascript检查以确定这一点。现在,我已经使用过PHP,但是将来我们需要通过javascript检查它,如果我在javascript中转换它,我会更新这个帖子。

答案 3 :(得分:-1)

您可以通过查找save-data请求标头来检测用户是否已在Chrome,Opera或Yandex中启用了数据保存模式。 Dean Hume举了一个如何detect data saving mode的例子,虽然不幸的是他的例子使用了服务工作者,所以它不能在Opera Mini上工作。

Chrome Data Saver使用代理,其他Android浏览器也是如此,例如极端模式下的Opera Mini和速度模式下的Android版UC浏览器迷你版。

您还应该能够查找X-Forwarded-For标头,以检测是否正在使用Chrome Data Compression Proxy