Android应用WebView无法加载Chrome中可正常播放的2embed影视嵌入URL问题
问题原因
- 现有WebView配置仅开启了JavaScript权限,缺少视频播放必需的配置项,且默认WebView的User-Agent标识与Chrome浏览器不一致,目标站点做了UA校验,会拦截非浏览器的访问请求
- 未开启DOM存储权限,站点加载资源时需要依赖本地存储存储会话与配置信息,会导致资源加载失败
- 未配置媒体播放相关权限,默认WebView要求用户手动触发才会播放媒体资源,且默认拦截第三方Cookie,导致站点鉴权失败
- 未设置WebViewClient,WebView默认会调用系统浏览器打开外部链接,不会在当前组件内加载内容
可行解决方案
1. 补充WebView基础配置
修改后的完整WebView初始化代码如下:
setContentView(R.layout.activity_main); webView = findViewById(R.id.WebView); WebSettings webSettings = webView.getSettings(); // 基础权限配置 webSettings.setJavaScriptEnabled(true); webSettings.setDomStorageEnabled(true); webSettings.setAllowFileAccess(true); // 媒体播放配置 webSettings.setMediaPlaybackRequiresUserGesture(false); // 混合内容加载配置,解决http资源在https页面无法加载的问题 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); } // 修改UA为移动端Chrome的UA,绕过站点UA校验 String chromeUA = "Mozilla/5.0 (Linux; Android 13; SM-G998B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36"; webSettings.setUserAgentString(chromeUA); // 允许第三方Cookie,通过站点鉴权 CookieManager cookieManager = CookieManager.getInstance(); cookieManager.setAcceptCookie(true); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { cookieManager.setAcceptThirdPartyCookies(webView, true); } // 配置页面加载客户端,让所有链接在当前WebView内加载 webView.setWebViewClient(new WebViewClient()); webView.setWebChromeClient(new WebChromeClient()); webView.loadUrl("https://www.2embed.ru/embed/imdb/movie?id=tt6806448");
2. 补充权限声明
在AndroidManifest.xml中添加网络访问权限:
<uses-permission android:name="android.permission.INTERNET" />
3. 兼容项说明
- 建议使用Android 8.0及以上系统测试,低版本系统内置WebView内核对H265、AV1等新视频编码格式的兼容度较低,可能会出现播放异常
- 如果站点有更严格的反爬校验,可将WebView的请求头参数、屏幕参数等调整为和真实Chrome浏览器一致,即可绕过拦截
内容的提问来源于stack exchange,提问作者vandit vasa
相关产品推荐
相关产品推荐

