• 在UIWebView开发中,经常会使用 alert() 函数来调试脚本。但在某种情况下,alert() 函数是无效的,同时导致 App 停止响应。 比如你在 UIWebView 中调用 native 方法弹出一个模式窗口(比如展现一个模式菜单),然后...

    在UIWebView开发中,经常会使用 alert() 函数来调试脚本。但在某种情况下,alert() 函数是无效的,同时导致 App 停止响应。
    比如你在 UIWebView 中调用 native 方法弹出一个模式窗口(比如展现一个模式菜单),然后再在这个模式窗口中回调 js 函数。在这个 js 函数中,如果你使用 alert() 函数,就会导致前面所说的问题。如下图所示:

    但点击导航栏的 + 号按钮, UIWebView 调用了 native 的菜单组件显示一个弹出菜单。当你再点击 “aaaa” 或者 “bbbb” 时,菜单组件又会调用 UIWebView 中加载的 javascript 函数 test2 :

    function test2(para){
    
        window.alert(para);
        document.getElementById('debug').innerHTML='clicked '+para+' times';
    
    }

    在 test2 中我们调用了一个 alert() 函数。因为菜单组件在 native 中是以模式窗口的形式实现的,而 alert 对话框实际也是一种模式窗口,操作系统规定在同一时刻只能呈现一个模式窗口,如果当前模式窗口未解散就弹出另一个模式窗口,将导致错误发生,因此 App 崩溃。

    展开全文
  • //Window.Alert界面改良  window.alert=function(msg){  var wHeight=$(window).height();  var bHeight=$("body").height();  if(bHeight  //透明背景层  

            
            //Window.Alert界面改良
            window.alert=function(msg){
                var wHeight=$(window).height();
                var bHeight=$("body").height();
                if(bHeight<wHeight) bHeight=wHeight;
                //透明背景层
                $("body").append("<div id='divAlertBg' style='position:absolute;z-index:1;top:0px;left:0px;width:100%;height:"+bHeight+"px;background:#555;opacity:0.5;'></div>");
                //提示框层
                var boxWidth=260;
                var scrollTop=$("body").scrollTop();
                scrollTop+=200;
                var wWidth=$(window).width();
                var left=(wWidth-boxWidth)/2
                var boxHtml="<div id='divAlertBox' style='position:absolute;z-index:2;top:"+scrollTop+"px;left:"+left+"px;width:"+boxWidth+"px;background:#FFF;border-radius:5px;'>"+
                                "<div style='text-align:center;font-size:18px;font-family:黑体;font-weight:bold;padding-top:10px;'>提示</div>"+
                                "<div style='text-align:center;font-size:13px;padding:15px 0px;'>"+msg+"</div>"+
                                "<div id='divAlertEnter' style='background:url(/iGzeeOA/prg/weixin/img/inputLine1.jpg) repeat-x;background-size:100% 1px;text-align:center;color:#007AFF;font-size:18px;font-family:黑体;font-weight:bold;padding:10px 0px;'>确定</div>"+
                            "</div>";
                $("body").append(boxHtml);
                $("#divAlertEnter").bind("click",function(){
                   $("#divAlertBg").remove();
                   $("#divAlertBox").remove();
                });           
            };
    展开全文
  • 具体步骤: 1、首先,给maven的运行时...3、选择webapp模板的时候,要下面的maven那个,而不要上面coco这个。 3、剩下就是正常流程化的东西了,多赘述了。 创建完的web项目结构: 说明一下原...

     

    具体步骤:

    1、首先,给maven的运行时添加一个配置:-Dhttps.protocols=TLSv1.2,如下图

     

    2、创建project或module

     

    3、选择webapp模板的时候,要用下面的maven那个,而不要用上面coco这个。

     

    3、剩下就是正常流程化的东西了,不多赘述了。

    创建完的web项目结构:

     


     

    说明一下原因

    由于TLSv1.1 协议不安全, 出于PCI 安全标准的原因, 从2018-06-18起, maven Sonatype 中央仓库不再支持 TLSv1.1 以及以下的协议版本,

    原文参见 no longer supports TLSv1.1 and below  官方说明

    我使用的 jdk 是 1.7 , jdk1.7虽然支持TLS 1.2 但是默认是 disabled的, 所以就会出现上面的 Received fatal alert: protocol_version  异常 

    下表格是 根据Oracle文档 各版本JDK默认使用的TLS协议:

     

    解决方案:

    方案1 :  升级 jdk 到1.8

    jdk1.8  TLS 1.2 默认是 enable ,不会出现这个异常

    PS: 这个代价可以有点大, 尤其是一些老的项目, 不是说升就可以升的

    方案2:  通过添加 -Dhttps.protocols=TLSv1.2 , 配置 java runtime 参数,来 enable TLS 1.2

     

    总结:如果你是jdk 1.7,2个方案都可以(本文用的是第2个方案),如果你是1.6或以下,建议还是升JDK吧。

     

    转载于:https://www.cnblogs.com/jsoso/p/11208065.html

    展开全文
  • 原文:C#开发移动应用系列(2.使用WebView搭建WebApp应用)前言 上篇文章地址:C#开发移动应用...说明一下为何要用WebApp的形式,因为首先..易于更新,其次学习成本又会降低一个档次 因为需要去很深入的了解各种安卓...
    原文:C#开发移动应用系列(2.使用WebView搭建WebApp应用)

    前言

    上篇文章地址:C#开发移动应用系列(1.环境搭建)

     

    嗯..一周了 本来打算2天一更的 - - ,结果 出差了..请各位原谅..

    今天我们来讲一下使用WebView搭建WebApp应用.

    说明一下为何要用WebApp的形式,因为首先..易于更新,其次学习成本又会降低一个档次

    因为不需要去很深入的了解各种安卓的界面布局,我们直接全屏覆盖一个WebView就好了.(当然,实际应用中还是需要加入一部分原生控件来提高用户体验)

    确定一下本篇的学习目标:

    1.学会使用WebView基础功能

    2.通过WebView调用页面中的JS代码

    3.通过WebView让页面中的JS代码调用后台的C#代码

    效果图:

    正文

    1.使用WebView构建基础框架

       我们首先打开上一篇我们只放了一个button的界面.

      从左侧工具栏中找到WebView并拖到我们的界面中,并放大到覆盖整个页面.位置如图:

    然后编写MainActivity.cs文件,在OnCreate()方法中获取我们的webView并进行基础设置

    代码如下:

    //获取WebView对象
    var webView = FindViewById<WebView>(Resource.Id.webView1);
    //申明WebView的配置
    WebSettings settings = webView.Settings;
    //设置允许执行JS
    settings.JavaScriptEnabled = true;
     //设置可以通过JS打开窗口
     settings.JavaScriptCanOpenWindowsAutomatically = true;
    //这里是自己创建的WebView客户端类
    var webc = new MyCommWebClient();
    //设置自己的WebView客户端
    webView.SetWebViewClient(webc);

    说明都已经在注释里了.

    下面我们来讲一下倒数第二行的MyCommWebClient是怎么来的.

    这里是我们自己申明的一个客户端类,用来拦截页面的跳转连接(不然会调用安卓原生游览器加载新页面),并在本页面中加载用的,代码如下:

        class MyCommWebClient: WebViewClient
        {
            //重写页面加载的方法
            public override bool ShouldOverrideUrlLoading(WebView view, String url)
            { 
                //使用本控件加载
                view.LoadUrl(url);
                //并返回true
                return true;
            }
        }

    这样,当页面中有A标签连接跳转的时候就不会调用安卓的原生游览器加载了.

    最后,我们在MainActivity.cs文件加上一句代码

    webView.LoadUrl("你的地址");

    就会跳转到你设定的页面中了.

    至此就完成了基本的WebView设置

    我们进入下一个阶段...

    2.通过WebView调用页面中的JS代码

    既然是要进行webAPP的开发 那么通过WebView来调用JS,肯定是少不了的..

    下面我们就开始讲解如何调用.

    首先我们要创建一个Web项目..我这里的例子创建的ASP.NET Core的..

    至于怎么让你的Web项目可以局域网访问..我就不多说了..自行百度

    修改我们的前端HTML页面

    <body ontouchstart="">
        <button onclick="showmessage('页面按钮点击')" type="button" class="mui-btn mui-btn-primary mui-btn-outlined">弹出</button>
        <script src="~/js/js/mui.js"></script>
        <script src="~/js/examples/hello-mui/js/mui.js"></script>
        <script>
            //定义一个JS方法,并返回一个字符串
            function  showmessage(message) {
                mui.alert(message)
    
                return "JS反馈"
            }
        </script>
    </body>

    如果我们不需要获取这个JS的返回值

    那么很简单,代码如下:

    webView.LoadUrl("javascript:" + "showmessage('安卓按钮点击')");

    就这样,一句即可..

    如果你要获取返回值.那就请往下看..

    我们需要使用到WebView的EvaluateJavascript函数

    这个函数有两个参数,一个是你要调用的JS,另一个则是IValueCallback

    如图:

    我们要创建一个类,来继承这个IValueCallback并提供返回值

    代码如下:

        public class ValueCall : Java.Lang.Object, IValueCallback
        {//定义delegate
            public delegate void TestEventHandler(string message);
            //用event 关键字声明事件对象
            public event TestEventHandler TestEvent;
            public void Dispose()
            {
               
            }
    
            //重写方法,获取返回值
            public void OnReceiveValue(Java.Lang.Object value)
            {
                string a = value.ToString();
                TestEvent(a);
            }
        }

    这里我们采用事件回调的方式,来返回我们获取的Value,(注:细心的朋友肯定发现了,我们还继承了Java.Lang.Object,因为这个接口是Java的对象..所以..我们需要继承一下JAVA基类..不然会报类型转换错误)

     

    然后我们回到MainActivity.cs

    在里面定义ShowMessage()的函数如下:

            public void ShowMessage(string message)
            {
               //很简单就是弹出返回值
                Toast.MakeText(this.ApplicationContext, message, ToastLength.Short).Show();
            }

     

    编写OnCreate函数中的代码如下:

    //获取按钮  
    var btn = FindViewById<Button>(Resource.Id.button1);//添加点击事件
                    btn.Click += delegate
                    {
                        ValueCall vc = new ValueCall();
                        //添加弹出返回值事件
                        vc.TestEvent += ShowMessage;
                        //调用JS
                        webView.EvaluateJavascript("showmessage('安卓按钮点击')", vc);
                    };

     

    这样,我们就完成了整个C#调用JS代码并获取返回值的过程

     

    3.通过WebView让页面中的JS代码调用后台的C#代码

    下面我们就来讲如何使用JS来调用C#代码.

    首先,我们申明一个类如下:

     public class MyJSInterface : Java.Lang.Object
        {
           
            Context context;
            
           //因为要弹出内容..所以构造函数需要一个当前的上下文对象
            public MyJSInterface(Context context)
            {
                this.context = context;
            }
            
            //注意,这里需要加两个特性
            [Export]
            [JavascriptInterface]
            public void SayHello(string message)
            {
                Toast.MakeText(context, message, ToastLength.Short).Show();
            }
        }

     

    其实很简单,就是创建一个函数,然后添加两个特性,代表着JS可以调用(有点类似WebAPI).

    这里需要注意的是Java.Interop.ExportAttribute这个特性.

    需要项目引用Mono.Android.Export

    注意这里的项目引用..的意思..就是 右键项目-->选择添加引用..而不是只Using

    回到我们的MainActivity.cs文件中的OnCreate方法.给我们webview继续添加代码如下:

    //添加我们刚创建的类,并命名为wv 
    webView.AddJavascriptInterface(new MyJSInterface(this), "wv");
    //加载测试页面 
    webView.LoadUrl("http://192.168.14.134:57870/");

     

    修改我们测试页面的代码如下:

    <body ontouchstart="">
        <button onclick="showmessage('页面按钮点击')" type="button" class="mui-btn mui-btn-primary mui-btn-outlined">弹出</button>
        <button onclick="ShowAdMessage()" type="button" class="mui-btn mui-btn-primary mui-btn-outlined">调用后台C#</button>
        <script src="~/js/js/mui.js"></script>
        <script src="~/js/examples/hello-mui/js/mui.js"></script>
        <script>
            function  showmessage(message) {
                mui.alert(message)
    
                return "JS反馈"
            }
    
            function ShowAdMessage() {
               // alert(wv);
                wv.SayHello("这里是JS调用后台的C#代码");
    
            }
        </script>
    </body>

    我们添加了一个按钮,并直接通过wv对象来调用后台的函数...

    信息弹出成功.到此.我们的JS调用C#代码就调用结束了

     

    写在最后

     代码虽然不多,但是很实用.

    基本了解这些内容 我们就可开始我们的WebApp基础开发了.

    当然,这些只是基础,我们要做一个商业应用..肯定是需要调用到机器的硬件设备,比如陀螺仪..摄像头什么之类的..

    这个我们留待后面讲解..敬请期待.. ...

    顺便说一句..各位大哥 - -,期待更新的..是不是应该点个推荐加个关注?..(滑稽)

    展开全文
  • 最近在开发一款应用软件,其中使用了webview加载html页面,这部分出现了问题,查找原因的时候由于在html中无法断点,我就在html里面加alert();输出字符串,可是怎么都弹出来,下面是我的代码: 通知 window...

    最近在开发一款应用软件,其中使用了webview加载html页面,这部分出现了问题,查找原因的时候由于在html中无法断点,我就在html里面加alert();输出字符串,可是怎么都弹不出来,下面是我的代码:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>通知</title>
    <script type="text/javascript">
    	window.onload = init;
    	 function init(){
     		var json={content:"<div style='text-align: center;'><span style='color: inherit;'><font size='5'>关于放假的通知</font></span></div><blockquote style='margin: 0 0 0 40px; border: none; padding: 0px;'><div style='text-align: left;'><span style='color: inherit;'><font size='3'>关于放假的通知</font></span></div><div style='text-align: left;'><font size='3' style='color: inherit;'>关于放假的通知</font><span style='color: inherit; font-size: medium;'>关于放假的通知</span></div><div style='text-align: left;'><span style='font-size: medium; color: inherit;'>关于放假的通知</span></div></blockquote><blockquote style='margin: 0 0 0 40px; border: none; padding: 0px;'><div style='text-align: left;'><span style='color: inherit;'><font size='3'><br></font></span></div></blockquote></div>"};
           		fundTrading(json);
     	}
    	function fundTrading(json){
            alert("fundTrading done1");
            if(json){
                alert("fundTrading done");
                alert(json.content);
            }
    		var content=json.content;
            
    		document.getElementById("content").innerHTML=content;
    	}
    </script>
    </head>
    
    <body>
    <div id="content">
    
    </div>
    </body>
    </html>
    
    后来在我同事的帮助下解决了这个问题,打开xcode中的organizer,选择projects,删除你所运行的工程的derived data数据,然后product->clean一下工程,再重新run,alert就弹出来啦。说实话我也不知道为什么出现这种现象,好像xcode突然失灵了似的。。。。。。。
    展开全文
  • 最近做hybrid webapp,碰到一个问题,以前的版本,ios和android都可以通过重写webview的alert等弹窗事件来隐藏掉弹窗的标题,但是ios7之后,api被禁用了,导致ios无法重写来实现隐藏标题,后来想过几种方案: ...
  • 在设计师与前端开发人员的努力下,一个WebApp出炉了,可是测试人员说了一堆的问题:某某机型下页面表现一致,某某系统下页面如何如何,某某 系统浏览器下页面怎么怎么滴。看着满满的测试汇总文档,我们曾经在一个...
  • 推荐一个web前端学习 QQ群606721798,欢迎大家...幸好,webkit内核的浏览器帮助我们完成这一切。接触 webkit webapp的开发已经有一段时间了,现把一些技巧分享给大家 : 1. viewport: 也就是可视区域。对于桌...
  • 1.5 版本更新说明 BUI 1.5版本以后变化很大,统一新的风格,新的规范750,新增基于Dom的数据驱动,完善了单页路由页面的生命周期等等,在...后续我们还会整理一些实战类的教程,欢迎关注BUI Webapp专栏。 一...
  • webapp中,input表单focus会触发虚拟键盘弹出,blur会触发虚拟键盘隐藏。 但是有时会出现,blur触发了虚拟键盘隐藏,但是虚拟键盘的背景区域依然保留在原来的位置。 点击body任何区域,或者在页面中 alert() ...
  • 一、移动WebApp简单介绍  WebApp简介  Web app是一种通过网络(如互联网或内联网)访问的应用程序;也可以指计算机软件承载在浏览器支持环境下或使用浏览器支持语言(如JavaScript)并依赖于web 浏览器来渲染...
  • HBuilder webapp实现消息推送 关于软件的push推送 HBuilder 只提供了二个SDK(小米推送、个推) 因为我使用的是个推所以这篇文章就主要介绍如何使用个推实现消息推送、 1.注册个推 个推官网:...
  • js复制webapp 和网页

    2019-10-04 11:15:40
    亲测都能使用 webapp function copyToClip(tt) { var text= tt; if(mui.os.android) { var Context = plus.android.importClass("android.content.Context"); ...
  • webapp调起浏览器分享

    2019-07-26 14:08:58
    webapp调起浏览器分享 起因 最近在做一个新闻资讯页,有分享的功能,在参考了很多的资料后,有以下总结。 兼容性 移动端几乎所有浏览器都支持分享到QQ和QQ空间 QQ浏览器 UC浏览器 微信自带浏览器 QQ自带浏览器 QQ...
  • WebApp调用手机相册或摄像头、拨打电话 一、总结 一句话总结:input标签,指定type为file,选择好对应的accept即可。camera——相机,相应的accept为image ; camcoder——摄像机,相应的accept为video;...
  • 优化的手段了很多,图片压缩、cdn加速、ajax操作缓存、客户端数据缓存、弹性滑动等,一系列优化工作完成后,webApp的加载速度着实提高了不少,从原先的首屏1.75s到现在的300ms左右,还有稳定性和用户体验也还算...
  • 第一次写WebApp方面的页面,对于一些标签的理解性强。特别是一些常见的手机号的输入的编写,知道哪个 标签合适。 以及验证码的一些接口~~~也知道如何去调用。 下面是HTML代码 注册页面
  • 幸好,webkit内核的浏览器帮助我们完成这一切。接触 webkit webApp的开发已经有一段时间了,现把一些技巧分享给大家 : 1. viewport: 也就是可视区域。对于桌面浏览器,我们都很清楚viewport是什么,就是出去了...
1 2 3 4 5 ... 20
收藏数 7,258
精华内容 2,903
热门标签