微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Xamarin在Webview上形成标签如水印

如何解决Xamarin在Webview上形成标签如水印

enter image description here

enter image description here 如何在Xamarin Forms中的Webview上给(label.text)加水印?

解决方法

您要获得如下屏幕截图那样的结果吗?

enter image description here

如果是这样,则应该通过自定义渲染器实现。 url加载完成后,我们应该添加一个JS来实现waterMark。我建议您使用addWaterMarker()方法,它不会使Webview失去焦点。

[assembly: ExportRenderer(typeof(WebView),typeof(MyWebviewRenderer))]
namespace WebviewCoverDemo.Droid
{
    public class MyWebviewRenderer: WebViewRenderer
    {
        Context context;
        public MyWebviewRenderer(Context context):base(context)
        {
            this.context = context;
        }
        protected override void OnElementChanged(ElementChangedEventArgs<WebView> e)
        {
            base.OnElementChanged(e);
            Control.Settings.JavaScriptEnabled = true;
            Control.SetWebViewClient(new MyWebviewClient());
        }
    }

    internal class MyWebviewClient : Android.Webkit.WebViewClient
    {
        bool showDiv = false;

        public override void OnPageFinished(Android.Webkit.WebView view,string url)
        {
            base.OnPageFinished(view,url);
            view.LoadUrl("javascript:" + (showDiv ? addWaterMarkerDiv("ss")
                                    : addWaterMarker("body background")));
        }

        string addWaterMarker(string watermark)
        {
            string js = "var newscript = document.createElement(\"script\");";
            js += "var bbTextNode = document.createTextNode(\"";
            js += "var can = document.createElement('canvas');";
            js +=
                "var body = document.body;body.appendChild(can);can.width=400; can.height=400;can.style.display='none';"
                    + "var cans = can.getContext('2d');cans.rotate(-20*Math.PI/180);cans.font = '46px Microsoft JhengHei';"
                    + "cans.fillStyle = 'rgba(255,0.50)';cans.textAlign = 'left';"
                    + "cans.textBaseline = 'Middle';cans.fillText('watermark',can.width/3,can.height/2);"
                    + "body.style.backgroundImage='url('+can.toDataURL('image/png')+')';"
            ;
            js += "\");";
            js += "newscript.appendChild(bbTextNode);";
            //js += "var t = document.createTextNode(\"alert('action');\");";
            //js += "newscript.appendChild(t);";
            //js += "newscript.onload=function(){xxx();};";  //xxx()代表js中某方法
            js += "document.body.appendChild(newscript);";

            return js;
        }

        string addWaterMarkerDiv(string watermark)
        {
            string js = "var newscript = document.createElement(\"script\");";

            js += "var waterMarkDiv = document.createTextNode(\""
                //+"if(document.getElementById('waterMark') != null) return;"
                + "var m = 'waterMark';"
                + "var newMark = document.createElement('div');"
                + "newMark.id = m;"
                + "newMark.style.position = 'absolute';"
                + "newMark.style.zIndex = '9527';"
                + "newMark.style.top = '0px';"
                + "newMark.style.left = '0px';"
                + "newMark.style.width = '800px';"
                + "newMark.style.height = '400px';"
                //+ "alert('newmark');"
                + "\");"
            ;

            js += "newscript.appendChild(waterMarkDiv);";
            js += "var bbTextNode = document.createTextNode(\"";
            js += "var can = document.createElement('canvas');";
            js +=
                "var body = document.body;body.appendChild(can);can.width=400; can.height=400;can.style.display='none';"
                    + "var cans = can.getContext('2d');cans.rotate(-20*Math.PI/180);cans.font = '46px Microsoft JhengHei';"
                    + "cans.fillStyle = 'rgba(17,17,can.height/2);"
                    + "newMark.style.backgroundImage='url('+can.toDataURL('image/png')+')';"
                    + "newMark.style.filter = 'alpha(opacity=50)';"
                    + "document.body.appendChild(newMark);"
            ;
            js += "\");";
            js += "newscript.appendChild(bbTextNode);";
            js += "document.body.appendChild(newscript);";

            return js;
        }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。