如何让 Chrome 支持的 webview 颤动?

Posted

技术标签:

【中文标题】如何让 Chrome 支持的 webview 颤动?【英文标题】:how to get Chrome Powered webview in flutter? 【发布时间】:2019-04-25 23:12:03 【问题描述】:

我最近注意到,当在一些少数 android 应用中打开链接时,它们具有类似的外观和自定义操作菜单,自定义菜单下方带有“由 Chrome 提供支持”。这里使用了什么组件,还是它仍然是 Chromium WebView?希望我希望将它们添加到我的下一个项目中,这些项目涉及在应用程序内打开链接。在 Flutter 中实现类似桌面视图。

平台:安卓 webview:带有自定义选项的 chrome 驱动的 webview 框架:颤振

领英应用

GMail 应用程序

我的颤振医生:

[√] Flutter (Channel beta, v0.11.9, on Microsoft Windows [Version 
10.0.17134.407], locale en-IN)
[√] Android toolchain - develop for Android devices (Android SDK 28.0.3)
[√] Android Studio (version 3.2)
[√] VS Code (version 1.29.1)
[√] VS Code, 64-bit edition (version 1.26.1)
[!] Connected device
! No devices available

我的 github 问题: click here

提前致谢。

【问题讨论】:

那不是webview,那叫Chrome Custom Tabs 是的,就是这样,如何让它颤动?投票给我的问题:) 【参考方案1】:

你可以使用这个包:

https://pub.dartlang.org/packages/flutter_custom_tabs

但请注意,此行为仅适用于 Android,在 ios 上将使用 Safari webview。

【讨论】:

如果您在发布版本时遇到冻结应用问题,请查看此问题github.com/droibit/flutter_custom_tabs/issues/21【参考方案2】:

你可以试试我的插件flutter_inappbrowser(编辑:它已被重命名为flutter_inappwebview)。为此,您需要使用 ChromeSafariBrowser 类。

它在 Android 上使用 Chrome Custom Tabs,在 iOS 上使用 SFSafariViewController。

您可以使用 InAppBrowser 后备实例初始化 ChromeSafariBrowser 实例。

一个例子:

import 'package:flutter/material.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';

class MyInAppBrowser extends InAppBrowser 

  @override
  Future onLoadStart(String url) async 
    print("\n\nStarted $url\n\n");
  

  @override
  Future onLoadStop(String url) async 
    print("\n\nStopped $url\n\n");
  

  @override
  void onLoadError(String url, int code, String message) 
    print("\n\nCan't load $url.. Error: $message\n\n");
  

  @override
  void onExit() 
    print("\n\nBrowser closed!\n\n");
  



class MyChromeSafariBrowser extends ChromeSafariBrowser 

  MyChromeSafariBrowser(browserFallback) : super(bFallback: browserFallback);

  @override
  void onOpened() 
    print("ChromeSafari browser opened");
  

  @override
  void onLoaded() 
    print("ChromeSafari browser loaded");
  

  @override
  void onClosed() 
    print("ChromeSafari browser closed");
  


void main() => runApp(new MyApp());

class MyApp extends StatefulWidget 
  final ChromeSafariBrowser browser = new MyChromeSafariBrowser(new MyInAppBrowser());

  @override
  _MyAppState createState() => new _MyAppState();


class _MyAppState extends State<MyApp> 

  @override
  void initState() 
    super.initState();
  

  @override
  Widget build(BuildContext context) 
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('ChromeSafariBrowser Example'),
        ),
        body: Center(
          child: RaisedButton(
              onPressed: () async 
                await widget.browser.open(
                    url: "https://flutter.dev/",
                    options: ChromeSafariBrowserClassOptions(
                        androidChromeCustomTabsOptions: AndroidChromeCustomTabsOptions(addShareButton: false),
                        iosSafariOptions: IosSafariOptions(barCollapsingEnabled: true)));
              ,
              child: Text("Open Chrome Safari Browser")),
        ),
      ),
    );
  

【讨论】:

我正在使用你的插件。您知道是否可以全屏使用 ChromeSafariBrowser 类? (不显示网址栏) 我刚刚发现,根据这篇文章,是不可能的:***.com/questions/38491936/… 是否可以在您的 webview 中运行自定义 javascript 代码?

以上是关于如何让 Chrome 支持的 webview 颤动?的主要内容,如果未能解决你的问题,请参考以下文章

如何允许 webview 中的 mailto 方案颤动

如何在颤动的 webView 中屏蔽广告(移动应用中的网页)

在颤动的webview中禁用水平滚动

在 webview 中颤动水平滑动手势

在颤动的 webview 之间共享 cookie

弹出键盘时颤动webview黑屏