ip拦截跳转这个跳转要怎么弄

利用java filter 实现业务异常拦截 跳转到错误信息提示页面
1、缘由:我们在做项目中肯定都会遇到自定义业务异常 ,然后将业务异常信息跳转的统一的信息提示页面的情况,比如我们在struts的时候我们会用到struts的异常处理机制,我们在业务层会跑出我们遇到业务处理异常 ,然后交由struts处理将提示信息到一个页面进行显示,来提示用户的相关操作,这里我们会根据以上情景设计一下怎么来显示该功能。
2、解决方法:我们的业务异常通常都是抛出的,就是unchecked exception,所以最后总会到达调用该方法的最外层进行捕获,一般我们都会在action中调用我们的业务方法 ,而业务方法可能会跑出异常,此时我们就可以在此时做些文章了, 我们可以利用filter,来捕获我们抛出的异常,然后跳转到一个统一页面,进行信息提示了。
3、具体代码:
①自定义异常类,我想这个就不用多说了 ,大家都是会的:
BsException.java
package com.ajun.
* 业务异常类
* @author ajun
* @http://blog.csdn.net/ajun_studio
public class BsException extends RuntimeException {
//异常代码
private Object[]//一些其他信息
public BsException() {
public BsException(String message, Throwable throwable) {
super(message, throwable);
public BsException(String message) {
super(message);
public BsException(Throwable throwable) {
super(throwable);
public BsException(String message,String key){
super(message);
this.key =
public BsException(String message,String key,Object value){
super(message);
this.key =
this.values = new Object[]{value};
public BsException(String message,String key,Object[] values){
super(message);
this.key =
this.values =
public String getKey() {
public Object[] getValues() {
既然要用到filter ,自然少不了实现Filter接口,拦截你想要的请求,然后,就可以捕获异常了,此时你可以对你的chain.doFilter进行try catch,然后判断你想捕获的异常,很简单 ,请看代码:
package com.ajun.
import java.io.IOE
import javax.servlet.F
import javax.servlet.FilterC
import javax.servlet.FilterC
import javax.servlet.ServletE
import javax.servlet.ServletR
import javax.servlet.ServletR
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
import com.ajun.exception.BsE
* 业务异常过滤器
* @author ajun
* @http://blog.csdn.net/ajun_studio
public class ExceptionFiler implements Filter {
private String errorP//跳转的错误信息页面
public void destroy() {
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse)
HttpServletRequest request = (HttpServletRequest)
//捕获你抛出的业务异常
chain.doFilter(req, res);
} catch (RuntimeException e) {
if(e instanceof BsException){//如果是你定义的业务异常
request.setAttribute("BsException", e);//存储业务异常信息类
request.getRequestDispatcher(errorPage).forward(request, response);//跳转到信息提示页面!!
e.printStackTrace();
//初始化读取你配置的提示页面路径
public void init(FilterConfig config) throws ServletException {
//读取错误信息提示页面路径
errorPage = config.getInitParameter("errorPage");
if(null==errorPage || "".equals(errorPage)){
throw new RuntimeException("没有配置错误信息跳转页面,请再web.xml中进行配置\n&init-param&\n&param-name&errorPage&/param-name&\n&param-value&/error.jsp&/param-value&\n &/init-param&\n路径可以是你自己设定的任何有效路径页面!!");
//System.out.println("没有配置错误信息跳转页面");
Filter在web.xml中的配置如下:
view plaincopy to clipboardprint?
&filter-name&ExceptionFilter&/filter-name&
&filter-class&com.ajun.filter.ExceptionFiler&/filter-class&
&init-param&
&param-name&errorPage&/param-name&
&param-value&/error.jsp&/param-value&
&/init-param&
&filter-mapping&
&filter-name&ExceptionFilter&/filter-name&
&url-pattern&*.do&/url-pattern&
&/filter-mapping&
&filter-name&ExceptionFilter&/filter-name&
&filter-class&com.ajun.filter.ExceptionFiler&/filter-class&
&init-param&
&param-name&errorPage&/param-name&
&param-value&/error.jsp&/param-value&
&/init-param&
&filter-mapping&
&filter-name&ExceptionFilter&/filter-name&
&url-pattern&*.do&/url-pattern&
&/filter-mapping&
下面写个servlet ,在请求的时候抛出你定义业务异常来试验一下吧
package com.ajun.
import java.io.IOE
import java.io.PrintW
import javax.servlet.ServletE
import javax.servlet.http.HttpS
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
public class ExServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
TestService t = new TestService();
t.add();//模拟调用业务层方法,在此方法内抛出异常,此异常会在filter中进行捕获。
web.xml配置上述servlet
view plaincopy to clipboardprint?
&servlet-name&ExServlet&/servlet-name&
&servlet-class&com.ajun.servlet.ExServlet&/servlet-class&
&/servlet&
&servlet-mapping&
&servlet-name&ExServlet&/servlet-name&
&url-pattern&*.do&/url-pattern&
&/servlet-mapping&
&servlet-name&ExServlet&/servlet-name&
&servlet-class&com.ajun.servlet.ExServlet&/servlet-class&
&/servlet&
&servlet-mapping&
&servlet-name&ExServlet&/servlet-name&
&url-pattern&*.do&/url-pattern&
&/servlet-mapping&
测试时在servlet中被调用的业务类
TestService.java
view plaincopy to clipboardprint?
package com.ajun.
import com.ajun.exception.BsE
public class TestService {
public void add(){
System.out.println("add () was called!!");
throw new BsException("in add() throws exception!!");//抛出异常,根据你的业务逻辑
package com.ajun.
import com.ajun.exception.BsE
public class TestService {
public void add(){
System.out.println("add () was called!!");
throw new BsException("in add() throws exception!!");//抛出异常,根据你的业务逻辑
现在部署项目,在你的浏览器内输入:
成功跳转到error.jsp:显示:in add() throws exception!!
在后台得到:
com.ajun.exception.BsException: in add() throws exception!!
at com.ajun.servlet.TestService.add(TestService.java:11)
at com.ajun.servlet.ExServlet.doPost(ExServlet.java:26)
at com.ajun.servlet.ExServlet.doGet(ExServlet
转载地址:http://blog.csdn.net/ajun_studio/article/details/6876109
没有更多推荐了,axios 拦截 , 页面跳转, token 验证(经常用于判断用户是否登录)
多添加一个自定义字段 requireAuth
path: '/repository',
name: 'repository',
requireAuth: true,
// 添加该字段,表示进入这个路由是需要登录的
component: Repository
登录拦截到这里就结束了吗?并没有。
这种方式只是简单的前端路由控制,并不能真正阻止用户访问需要登录权限的路由。(可手动在浏览器地址栏输入没有权限的路由)
还有一种情况便是:当前token失效了,但是token依然保存在本地。
这时候你去访问需要登录权限的路由时,实际上应该让用户重新登录。
这时候就需要结合 http 拦截器 + 后端接口返回的http 状态码来判断。
拦截器 (要想统一处理所有http请求和响应,就得用上 axios 的拦截器。)
每次跳页面, 都要获取新路由对应的html页面, 这时候可以用axios的http拦截
每次路由跳转, 都先让后台验证一下token是否有效, 在http头添加token,
当后端接口返回 401 Unauthorized(未授权) ,让用户重新登录。
使用之后会忽略cookie的token,
削弱了安全性, 可以配合https
完整的方法见 /src/http.js .
通过上面这几步,就可以在前端实现登录拦截了。
登出 功能也就很简单,只需要把当前token清除,再跳转到首页即可。
没有更多推荐了,技术,是服务于人而不是局限住人的
曲径通幽拦截a标签的跳转
在一些项目中经常会遇到拦截a标签的默认弹框的情况。最近的项目中有这样的需求,只有界面中的输入合法后,点击某个a标签才会转向到后台的action,然后弹出某个jsp。
一、需求:
具体的需求见下面的界面:
只有当选择了课程、考试,并计算了分值分布后,点击添加按钮(实质是a标签)才弹出该课程下相关联的题型,如下图:
二、解决思路:
1、使用js拦截a标签的默认弹框行为。
应该说这是最直接也是一般人最先想到的方法,于是从网上找了不少资料,进行了各种尝试。可能是dwz框架的原因,总是拦截失败。
&script type="text/javascript"&
function notRun(){
My_function();
&a href="" onclick="return notRun();"&点我不会跳转&/a&
大概的思路是单击a标签的时候,处罚onclick事件,如果该事件返回false ,那么会阻止a标签的默认行为,类似阻止form表单的自动提交。
如果在单击时候还有一些其他的函数要执行,那么可以做如下的修改:
&script type="text/javascript"&
function My_function(address){
//do anyting you want
//执行完需要的功能再将页面跳转到href中指定的链接
window.location.href=
//notRun函数用于接收超链接地址并将其传入需要执行的函数My_function之中,再返回false将默认行为清除
function notRun(address){
My_function(address); //向自定义函数传值
//清除默认行为
&!--在超链接中添加onclick事件并将超链接地址传入notRun函数--&
&a href="yourLinkAddress" onclick="return notRun(this);"&点我不会跳转&/a&
另外,关于a标签的一些属性,也顺便查了些资料:
1.链接的onclick 事件被先执行,其次是href属性下的动作(页面跳转,或 javascript 伪链接);
2.假设链接中同时存在href 与onclick,如果想让href 属性下的动作不执行,onclick 必须得到一个false的返回值;
3.如果页面过长有滚动条,且希望通过链接的 onclick 事件执行操作。应将它的 href 属性设为 javascript:void(0);,而不要是 #,这可以防止不必要的页面跳动;
4.如果在链接的 href属性中调用一个有返回值的函数,当前页面的内容将被此函数的返回值代替。
关于="javascript:void(0)的一点说明:
在Javascript中void是一个操作符,该操作符指定要计算一个表达式但是不返回值。void(0) 计算为 0,但 Javascript 上没有任何效果。
&a href="javascript:void(0)" onclick="subgo()"&点我&/a&
在这里,javascript:void(0),没启实质上的作用,它仅仅是一个死链接,执行的函数是subgo()。
&a href="#" onclick="subgo()"&点我&/a&与&a href="javascript:void(0)" onclick="subgo()"&点我&/a&区别。
实际上 #包含了一个位置信息默认的锚是#top 也就是网页的上端 ,而javascript:void(0) 仅仅表示一个死链接,没有任何信息。所以调用脚本的时候最好用void(0)
下面是基于事件的实现思路:
function stopDefault(e)
var oEvent=e ||
if(oEvent && oEvent.preventDefault)
oEvent.preventDefault();
window.event.returnValue =
window.onload = function()
var aTable = document.getElementsByTagName("a");
for (var i=0; i&aTable. i++ )
aTable[i].onclick = function(event)
alert("title:"+this.innerHMLT+",href:"+this.href);
stopDefault(event)
思路一总结:
链接的 onclick 事件被先执行,其次是 href 属性下的动作(页面跳转,或 javascript 伪链接),如果不想让href 属性下的动作执行,onclick 需要要返回 false ,一般是这样写onclick="xxx();"。
2、使用js动态隐藏、显示a标签。
尝试了上面的方法后,都解决不了问题。这个思路则跳出了a标签的局限,从另一个层面解决了跳转问题。
按照上面的思路的a标签:
&a class="add" name="bindTitle" href="${contextPath }/template/showAddTemplateTwoAction.action" onclick=" return bindExam();" target="dialog" mask="true"&&span&添加&/span&&/a&
&/li& 对比,现在的a标签:&li id="divadd" style="width: 0"&
&a id="add" class="add" href="javascript:void(0);" target="dialog" mask="true"&&/a&
&/li&隐藏或显示a标签的js代码:&script type="text/javascript"&
//自定义trim函数
String.prototype.trim = function() {
var str = this,
whitespace = ' \n\r\t\f\x0b\xa0\u\u\u\u\u\u200a\u200b\u\u3000';
for (var i = 0,len = str. i & i++) {
if (whitespace.indexOf(str.charAt(i)) === -1) {
str = str.substring(i);
for (i = str.length - 1; i &= 0; i--) {
if (whitespace.indexOf(str.charAt(i)) === -1) {
str = str.substring(0, i + 1);
return whitespace.indexOf(str.charAt(0)) === -1 ? str : '';
function initHtml() {
var degreeOneScoreCal = document.getElementById("degreeOneScoreCalCustom").
var degreeTwoScoreCal = document.getElementById("degreeTwoScoreCalCustom").
var degreeThreeScoreCal = document .getElementById("degreeThreeScoreCalCustom").
var courseId = document.getElementById("template_add_combox_course").
var fullScore = document.getElementById("fullScoreCustom").
var hopeScore = document.getElementById("hopeScoreCustom").
var templateName = document.getElementById("templateNameCustom").
var add = document.getElementById("add");
var exam = document.getElementById("template_add_combox_exam");
var examId = exam.options[exam.selectedIndex].
if (courseId == null || courseId.trim() == "" ||examId == null || examId.trim() == "" || fullScore == null || fullScore.trim() == "" || hopeScore == null || hopeScore.trim() == "" ||
templateName == null || templateName.trim() == ""
document.getElementById("divadd").style.width = "0px";
if (degreeOneScoreCal == null || degreeOneScoreCal.trim() == "" ||degreeTwoScoreCal == null || degreeTwoScoreCal.trim() == "" || degreeThreeScoreCal == null || degreeThreeScoreCal.trim() == "" )
document.getElementById("divadd").style.width = "0px";
document.getElementById("divadd").style.width = "55px";
add. href="${contextPath }/template/showAddTemplateTwoAction.action?examId=" + examId + "&courseId=" + courseId
+ "&fullScore=" + fullScore + "&hopeScore=" + hopeScore
+ "&templateName=" + encodeURI(encodeURI(templateName))
+ "°reeOneScoreCal=" + degreeOneScoreCal
+ "°reeTwoScoreCal=" + degreeTwoScoreCal
+ "°reeThreeScoreCal=" + degreeThreeScoreC
add.innerHTML="&span&添加&/span&";
new function() {
initHtml();
因为界面中模板名、总分、期望分等文本框也需要有相应的数据,那么需要在这些html标签的一些相关事件中注册这个函数文本框失去焦点的时候nblur="initHtml();" 下拉框的onchange="initHtml();"。这样如果界面中输入不合法,就不会出现天价按钮,就不会引起用户的错误操作:
三、总结:
技术都是死的,不管学习多少,最重要的是会使用这些技术区解决问题;
很多时候一个问题可以通过多个途径来解决,不断在项目中历练,不断的娴熟技术,更重要的的扩宽解决问题的思路。
曲径通幽,是解决问题的一种好思路,其实不只是在解决的问题中,在生活的方方面面都是一种哲学。用生活的艺术,来编程,站在一定的高度看待问题,解决问题。
没有更多推荐了,struts2--拦截器(非登录用户不可跳转至该页面)
拦截器类:
public class PrivilegeInterceptor extends MethodFilterInterceptor{
protected String doIntercept(ActionInvocation arg0) throws Exception {
AdminUser adminUser = (AdminUser) ServletActionContext.getRequest().getSession().getAttribute("adminUser");
if(adminUser == null) {
ActionSupport actionSupport =
(ActionSupport) arg0.getAction();
actionSupport.addActionError("您还没有登录,没有访问权限!");
return "loginfail";
return arg0.invoke();
struts.xml文件中配置:
name="PrivilegeInterceptor"
class="fjnu.lxf.myshop.interceptor.PrivilegeInterceptor"&&
name="loginfail"&/admin/index.jsp&
name="adminCategory_*" class="adminCategoryAction" method="{1}"&
name="findAll"&/admin/category/list.jsp&
name="savesuccess" type="redirectAction" &adminCategory_findAll.action&
name="deletesuccess" type="redirectAction" &adminCategory_findAll.action&
name="editsuccess"&/admin/category/edit.jsp&
name="updatesuccess" type="redirectAction" &adminCategory_findAll.action&
name="PrivilegeInterceptor"&&
name="defaultStack"&&
没有更多推荐了,如何屏蔽江苏电信错误页面的全省页面跳转_百度知道
如何屏蔽江苏电信错误页面的全省页面跳转
我有更好的答案
应用程序发生异常 未知的软件异常1.病毒木马造成的,在当今互联网时代,病毒坐着为了获得更多的牟利,常用病毒绑架应用程序和系统文件,然后某些安全杀毒软件把被病毒木马感染的应用程序和系统文件当病毒杀了导致的。2.应用程序组件丢失,应用程序完整的运行需要一些系统文件或者某些ll文件支持的,如果应用程序组件不完整也会导致的。3.系统文件损坏或丢失,盗版系统或Ghost版本系统,很容易出现该问题。4.操作系统自身的问题,操作系统本身也会有bug 。5.硬件问题,例如内存条坏了或者存在质量问题,或者内存条的金手指的灰尘特别多。 应用程序发生异常怎么办1.检查电脑是否存在病毒,请使用百度卫士进行木马查杀。2.系统文件损坏或丢失,盗版系统或Ghost版本系统,很容易出现该问题。建议:使用完整版或正版系统。3.安装的软件与系统或其它软件发生冲突,找到发生冲突的软件,卸载它。如果更新下载补丁不是该软件的错误补丁,也会引起软件异常,解决办法:卸载该软件,重新下载重新安装试试。顺便检查开机启动项,把没必要启动的启动项禁止开机启动。4.如果检查上面的都没问题,可以试试下面的方法。打开开始菜单→运行→输入cmd→回车,在命令提示符下输入下面命令 for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s %1回车。完成后,在输入下面for %i in (%windir%\system32\*.ocx) do regsvr32.exe /s %i 回车。如果怕输入错误,可以复制这两条指令,然后在命令提示符后击鼠标右键,打“粘贴”,回车,耐心等待,直到屏幕滚动停止为止。(重启电脑)。
采纳率:96%
来自团队:
应用程序发生异常 未知的软件异常1.病毒木马造成的,在当今互联网时代,病毒坐着为了获得更多的牟利,常用病毒绑架应用程序和系统文件,然后某些安全杀毒软件把被病毒木马感染的应用程序和系统文件当病毒杀了导致的。2.应用程序组件丢失,应用程序完整的运行需要一些系统文件或者某些ll文件支持的,如果应用程序组件不完整也会导致的。3.系统文件损坏或丢失,盗版系统或Ghost版本系统,很容易出现该问题。4.操作系统自身的问题,操作系统本身也会有bug 。5.硬件问题,例如内存条坏了或者存在质量问题,或者内存条的金手指的灰尘特别多。 应用程序发生异常怎么办1.检查电脑是否存在病毒,请使用百度卫士进行木马查杀。2.系统文件损坏或丢失,盗版系统或Ghost版本系统,很容易出现该问题。建议:使用完整版或正版系统。3.安装的软件与系统或其它软件发生冲突,找到发生冲突的软件,卸载它。如果更新下载补丁不是该软件的错误补丁,也会引起软件异常,解决办法:卸载该软件,重新下载重新安装试试。顺便检查开机启动项,把没必要启动的启动项禁止开机启动。4.如果检查上面的都没问题,可以试试下面的方法。打开开始菜单→运行→输入cmd→回车,在命令提示符下输入下面命令 for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s %1回车。完成后,在输入下面for %i in (%windir%\system32\*.ocx) do regsvr32.exe /s %i 回车。如果怕输入错误,可以复制这两条指令,然后在命令提示符后击鼠标右键,打“粘贴”,回车,耐心等待,直到屏幕滚动停止为止。(重启电脑)。
可以咨询一下客服,也可以不使用电信的网。
换张联通卡
  如果基本确认是运营商搞的鬼,建议去工信部投诉,虽然工信部为息事宁人,只对你停止侵害,且就算屡犯都不处罚运商(原因我真不知道),致各运营商越来越猖獗,但投诉人多也让他们(工信部)烦死,造成大声势的话,以后不得不全面处理,停止全部侵害!  这里是投诉网址,一般都还会认真处理的,他们也怕搞大的。  较简单的判断是否宽带运营商的搞的鬼,就换用不同的浏览器打开相同的跳转网页,如果都跳转,基本上就是运营商弄的了(有的运营商为了迷惑,劫持跳转后会间隔一小段时间再劫持,有的是不定时劫持跳转,所以可能需要多试几次)  确认方式:只要走vpu(加密),就没劫持,那就说明原来的劫持是运营商干的,有条件弄台干净电脑/双系统/虚拟系统测试下,排除一切其他可能(有的跳转小尾巴是恶意程序/扩展/插件造成的,以下方法针对远程宽带商机器,如果本地就被修改劫持,用这些方法无效)  先提供个防宽带运营商绝大部分劫持、广告的全方位简单方法:  安装mason扩展后,点击扩展的选项,添加新的规则,描述自己起个名字,包含网址填你要起作用的网址(必须是正则表达式,但似乎不必很规范,全部网站启用的话为 . ),不包含地址写你不希望它发生作用的网址(正则表达式,有些网页可能显示有问题,在这里排除即可,如不包含地址: ((miitbeian|jd|tudou|tudouui|pptv|flvcd)\.(org\.)?(cn|com))|(\d+\.\d+\.\d+\.\d+) 自己可以也增加更多)。功能里选择自定义http头信息,配置里选择both。header key 填user-agent,value留空不填最后点击2个确定。这样就可以了,再试试,是不是不跳转了,没小尾巴了,没广告了。。。  以上原理是在运营商路由/交换机劫持、修改请求头,修改响应内容时,都会对数据包提取user agent的参数,如果没有这个参数,他们的机器就傻了,而绝大部分网站都不依靠user agent, User Agent空的也被当作一般浏览器。(可以使用其他可设置user agent的扩展,但用mason似乎兼容性较好)  有的宽带商会同时用多种劫持方法,所以有时需使用以下设置才能彻底见效(各劫持方式见图):  1.如果宽带运营商是DNS劫持的话,就算手动设置了 DNS服务器8.8.8.8,在请求DNS报文发出后,还是最后会经过运营商的路由/交换机,发现有目标DNS请求,会返回预设好的虚假ip地址,所以事先指定ip地址,防止被发现被篡改。(就像有些朋友在狗哥不能访问时,手动添加狗哥的其他ip地址到hosts文件,就能直接访问,跳过伟大的x的dns 劫持,虽然一段时间后被x发现,直接禁止该IP,但只要有不为众人所知的狗哥IP地址,x都挡不住你访问,所有不失一种有效方法)  注:DNS劫持有2种,一种是直接劫持DNS服务器,一般人没这本事,电信的DNS服务器监守自盗,把网页请求转向114号码百事通(自己百度),所以才有了设置狗哥8.8.8.8的方法。另一种就是以上这种了。  方法:所以可以试试看在hosts文件中直接写入所需连接网址的ip,比如  61.135.169.121   搜索时,xxxx代表你要搜索的内容,可更换,运营商会随机把百度本地搜索替换为返利链接,有个跳转的过程。而修改hosts文件成功后,百度后面tn= 被换成返利商数字代号的小尾巴消失,第一次设置后,先 ipconfig /flushdns刷新下缓存dns再打开网页  且大部分宽带运营商通过DNS劫持的方式来强插广告,所以这样同样能防他们广告,但他们的广告是随机网页面显示,不可能把所有ip地址写入,只能弄点常用 的吧。。。  2. 1修改正常的网页请求的响应。在宽带商某个路由器边上的一台旁路设备,监听所有流过的HTTP会话。这个设备按照某种规律,对于某些HTTP请求进行处理。  比如在网页中强插广告,广告样式可以是(不限于)在浏览器右下角弹一个大概 320×240 的 flash 广告,不定时不定网页随机弹出。  方法:使用抓包工具,找到发广告的那个ip地址,在路由或杀毒软件或abp里屏蔽该ip(查询下ip,一般就在你的运营商的ip段中)。  (这个大多数人都知道吧)  2.2更狠的是把响应全给拦截了,把整个网页响应内容都改了再发还给你,  响应response应该是搜索的结果,但竟然全变成了js代码的重定向,状态是200(看见改成带小尾巴的了吧,看见最后一句了吧[Refresh][content=0][Url=]表示0秒后自动刷新转向到Url定义的u,也就是第一句那个有小尾巴的u)  因此我们的浏览内容全部可以被运营商截取,随时可以查看你在干啥,根本没有安全性可言,这个只有加密传输了能防了,比如用https。有趣的是百度不支持https,什么原因呢,哈哈哈,我真不知道  还有个最终兵器---vpu,神器一出,整个世界都安静了。。。
其他2条回答
为您推荐:
其他类似问题
江苏电信的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。}

我要回帖

更多关于 ios webview 拦截跳转 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信