IE各个版本下的透明兼容性写法

做个笔记:

.transparent {
    /* Required for IE 5, 6, 7 */

    /* Theoretically for IE 8 & 9 (more valid) */   
    /* ...but not required as filter works too */
    /* should come BEFORE filter */
    -ms-filter:alpha(opacity=50 finishopacity=0 style=1 startx=0,starty=0,finishx=0,finishy=150) progid:DXImageTransform.Microsoft.gradient(startcolorstr=white,endcolorstr=white);

    /* This works in IE 8 & 9 too */
    /* ... but also 5, 6, 7 */
    filter: alpha(opacity=50 finishopacity=0 style=1 startx=0,starty=0,finishx=0,finishy=150) progid:DXImageTransform.Microsoft.gradient(startcolorstr=white,endcolorstr=white);

    /* Older than Firefox 0.9 */
    -moz-opacity:0.5;

    /* Safari 1.x (pre WebKit!) */
    -khtml-opacity: 0.5;

    /* Modern!
    /* Firefox 0.9+, Safari 2?, Chrome any?
    /* Opera 9+, IE 9+ */
    opacity: 0.5;

    /* ...or something to trigger hasLayout, like zoom: 1; */
    zoom: 1; 
}

Alpha 滤镜参数详解

参数名 说明 取值说明

Opacity 不透明的程度,百分比。 从0到100,0表是完全透明,100表示完全不透明。
FinishOpacity 这是一个同Opacity一起使用的选择性的参数,当同时Opacity和FinishOpacity时,可以制作出透明渐进的效果,比较酷。 从0到100,0表是完全透明,100表示完全不透明。
Style 当同时设定了Opacity和finishOpacity产生透明渐进时,它主要是用赤指定渐进的显示形状。 0:没有渐进;1:直线渐进;2:圆形渐进;3:矩形辐射。
StartX 渐进开始的 X 坐标值
StartY 渐进开始的 Y 坐标值
FinishX 渐进结束的 X 坐标值
FinishY 渐进结束的 Y 坐标值

参考1:https://stackoverflow.com/questions/3975688/css-background-opacity-with-rgba-not-working-in-ie-8
参考2:https://blog.youkuaiyun.com/freshlover/article/details/17143341

<think>好的,用户想知道如何通过JavaScript获取B视频的真实播放URL。首先,我需要回忆一下B视频加载机制。B可能和西瓜视频类似,使用音视频分离或者动态加载资源。根据引用[1]中的例子,西瓜视频是通过JavaScript在控制台执行命令来获取视频和音频地址的,可能B也有类似的结构。 接下来,用户提到想用JavaScript,所以可能需要分析B页面加载后的数据对象。通常这类网会把视频信息存储在全局变量中,比如window对象下的某个属性。需要找到存储视频资源的路径。比如在引用[1]中,西瓜视频用的是window._SSR_HYDRATED_DATA,B可能也有类似的变量。 然后,考虑B视频播放器结构。B使用HTML5播放器的话,视频资源可能通过blob URL或者动态加载的m3u8、mpd文件。如果是blob,直接获取可能较难,但如果是动态加载的,可能在网络请求中找到视频地址。这时候可能需要用开发者工具查看XHR请求,找到视频的真实URL。不过用户希望用JavaScript直接获取,所以可能需要从页面内的对象中提取。 另外,引用[3]中的例子用了Image对象获取宽高,可能类似的方法可以应用到视频元素上。比如,查找页面中的video元素,然后获取其src属性。但B的video标签可能使用的是blob URL,这时候直接获取src可能不奏效,因为blob URL是临时的。 然后想到B的API结构。可能需要找到视频的初始化数据,比如通过页面中的script标签查找__INITIAL_STATE__这样的变量,里面可能包含视频的详细信息,包括不同清晰度的URL。例如,在页面源码中搜索__playinfo__或者__INITIAL_STATE__,这些对象里可能有视频和音频的地址。 另外,引用[4]中提到了通过API获取真实URL的方法,但用户这里可能需要绕过API直接通过前端JavaScript获取。可能需要分析B页面加载时的网络请求,找到获取视频地址的接口,然后模拟这个请求。但跨域问题可能存在,因此可能需要使用浏览器扩展或者后端代理。 综合这些,可能的步骤是:1. 打开B视频页面,打开开发者工具,查看网络请求,找到视频地址的来源。2. 在控制台中尝试访问全局变量,如window.__playinfo,看看是否有视频数据。3. 解析该对象,提取出视频和音频的URL。例如,可能像window.__playinfo__.data.dash.video[0].baseUrl这样的路径。4. 处理可能的加密参数,比如添加Referer头或者sign参数,以确保能直接访问URL。 需要注意的是,B可能会对视频地址进行防盗链处理,直接获取的URL可能需要携带特定的请求头才能访问。此外,B的接口可能会变化,所以这种方法可能需要定期更新。最后,用户可能需要使用浏览器控制台执行这些脚本,或者开发浏览器插件来实现自动化。</think>要获取B视频的真实播放地址,可以通过分析页面加载的全局对象或网络请求实现。以下是具体方法及注意事项: ### 一、通过全局对象获取 1. **打开开发者工具**:在B视频播放页面按F12打开控制台 2. **查找视频数据对象**:B视频信息通常存储在`window.__playinfo__`对象中 ```javascript // 获取视频数据对象 const playInfo = window.__playinfo__; // 提取最高清晰度视频地址 const videoUrl = playInfo.data.dash.video[0].baseUrl; // 提取音频地址 const audioUrl = playInfo.data.dash.audio[0].baseUrl; ``` ### 二、通过网络请求分析 1. **过滤m4s请求**:在开发者工具的Network标签中过滤`m4s`类型请求 2. **复制真实地址**:找到`video.m4s`和`audio.m4s`的请求URL,形如: ``` https://upos-sz-mirrorali.bilivideo.com/xxxxx/xxxxx/video.m4s?expires=xxx&sign=xxx ``` ### 、注意事项 1. **防盗链机制**:直接获取的URL需要携带`Referer: https://www.bilibili.com`请求头才能访问[^2] 2. **动态签名**:URL中的`sign`参数具有时效性(通常有效30分钟),过期后需重新获取[^4] 3. **分辨率选择**:`window.__playinfo__.data.dash.video`数组包含不同分辨率选项,索引0为最高清 ### 四、完整示例代码 ```javascript function getBiliVideoUrl() { if (!window.__playinfo__) { console.error('未找到视频数据对象'); return null; } const videos = window.__playinfo__.data.dash.video; const audios = window.__playinfo__.data.dash.audio; return { video: videos.sort((a,b) => b.bandwidth - a.bandwidth)[0].baseUrl, audio: audios.sort((a,b) => b.bandwidth - a.bandwidth)[0].baseUrl }; } // 使用示例 const urls = getBiliVideoUrl(); console.log('视频地址:', urls.video); console.log('音频地址:', urls.audio); ``` ### 五、扩展方法 对于需要持久化获取的场景,建议通过B开放API获取视频信息: ```javascript // 需自行申请API权限 fetch(`https://api.bilibili.com/x/player/playurl?cid=视频CID&bvid=视频BVID&qn=112`) .then(res => res.json()) .then(data => console.log(data.data.durl[0].url)) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值