如果我们要打开一个uniweb,同时需要关闭上一个网页,可以写一个uniwebbase,其他需要打开网页的类只需要继承这个类就可以重写一些监听事件。
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class UniwebBase : MonoBehaviour {
public static UniWebView _view;
public void CreatWebView(string url, GameObject init, Rect _docst=default(Rect), RectTransform _init = null, bool fullScreen = false)
{
Destroy();
//Debug.Log(url);
init.name =init+"?"+ Guid.NewGuid().ToString();
_view = init.AddComponent<UniWebView>();
_view .listener = init.AddComponent<UniWebViewNativeListener>();
UniWebViewNativeListener.AddListener(_view.listener);
if (fullScreen)
{
_view.rect = new Rect(0, 0, Screen.width, Screen.height);
}
else
{
if (_init)
{
_view.ReferenceRectTransform = _init;
}
else
{
_view.Frame = _docst;
}
}
UniWebViewInterface.Init(_view.listener.Name, (int)_view.rect.x, (int)_view.rect.y, (int)_view.rect.width, (int)_view.rect.height);
_view. isPortrait = Screen.height >= Screen.width;
_view.OnPageStarted += _view_OnPageStarted;
//网页完成
_view.OnPageFinished += _view_OnPageFinished;
//网页发送消息
_view.OnMessageReceived += _view_OnMessageReceived;
_view.OnPageErrorReceived += _view_OnPageErrorReceived;
_view.OnShouldClose += _view_OnShouldClose;
SetView();
_view.Load(url);
_view.UpdateFrame();
_view.Show(true, (UniWebViewTransitionEdge)4, 0.8f, () => Debug.Log("完成"));
}
public virtual void SetView()
{
_view.BackgroundColor = new Color(0, 0, 0, 0);
///设置单击web视图中的链接是否应该在外部浏览器中打开页面
_view.SetOpenLinksInExternalBrowser(false);
/// 设置在加载过程中是否显示加载指示器。
_view.SetShowSpinnerWhileLoading(true);
_view.SetSpinnerText("加载中...");
_view.SetHorizontalScrollBarEnabled(false);
_view.SetVerticalScrollBarEnabled(false);
/// 设置当滚动到页面边缘时,web视图是否应该显示弹跳效果。
_view.SetBouncesEnabled(false);
/// 设置web视图是否支持缩放guesture来更改内容大小。
_view.SetZoomEnabled(true);
// _view.useToolbar=true;
}
public virtual void _view_OnPageStarted(UniWebView webView, string url)
{
Debug.Log(url);
}
public virtual void _view_OnPageFinished(UniWebView webView, int statusCode, string url)
{
Debug.Log(statusCode+" "+url);
}
public virtual void _view_OnMessageReceived(UniWebView webView, UniWebViewMessage message)
{
}
public virtual void _view_OnPageErrorReceived(UniWebView webView, int errorCode, string errorMessage)
{
}
public virtual bool _view_OnShouldClose(UniWebView webView)
{
return true;
}
public void Destroy() {
if (_view != null)
{
Debug.Log("删除");
_view.OnPageStarted -= _view_OnPageStarted;
_view.OnPageFinished -= _view_OnPageFinished;
_view.OnMessageReceived -= _view_OnMessageReceived;
_view.OnPageErrorReceived -= _view_OnPageErrorReceived;
_view.OnShouldClose -= _view_OnShouldClose;
_view.CleanCache();
UniWebViewNativeListener.RemoveListener(_view.listener.Name);
UniWebViewInterface.Destroy(_view.listener.Name);
_view.name = _view.name.Split('?')[0];
Destroy(_view);
_view = null;
}
}
}
这样可以屏蔽uniwebview脚本里的Start,Awake,OnEnable ,OnDisable.并且在脚本增加public Rect rect这个属性;
然后在屏蔽UniWebViewNativeListener这个脚本里的他自己定义的uniweb以及事件方法不然会出错,
测试代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class test3 : UniwebBase {
public static test3 _instance;
private static string url = "https://www.taobao.com/";
public Rect _rect;
void Awake()
{
_instance = this;
}
// Use this for initialization
void Start()
{
GetComponent<Button>().onClick.AddListener(_test);
}
// Update is called once per frame
void Update()
{
}
public void _test()
{
_instance.CreatWebView(url, this.gameObject, _rect);
}
override public void _view_OnMessageReceived(UniWebView webView, UniWebViewMessage message)
{
base._view_OnMessageReceived(webView, message);
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class test1 : UniwebBase {
public static test1 _instance;
private static string url = "https://www.baidu.com/";
public RectTransform _rect;
void Awake()
{
_instance = this;
}
// Use this for initialization
void Start () {
GetComponent<Button>().onClick.AddListener(_test);
}
// Update is called once per frame
void Update () {
}
public void _test()
{
_instance.CreatWebView(url,this.gameObject, _init:_rect);
}
override public void _view_OnMessageReceived(UniWebView webView, UniWebViewMessage message)
{
base._view_OnMessageReceived(webView, message);
}
}
设置两个按钮完美切换