紧接着上一篇随笔iframe的内容增高或缩减时设置其iframe的高度的处理方案

  

  如果采用iframe来切换显示内容的方式来展现办公Web。那么需要解决几个问题

  1.tab标签需要和显示的iframe一一对应,当点击到某个tab页签的时候需要切换到对应的iframe。

  2.需要有新增、删除页签的tab功能。

  3.在tab页签之间切换的时候需要有一个记录点击的页签的历史记录的功能。何用?当你删除某个页签的时候,需要回溯到上一个页签。

  4.不断添加页签,需要计算页签的宽度做适配。

  本实例是这样做的

  <div class="tabbable" id="tabs">
<!-- Tab标签列表 -->
<ul class="nav nav-tabs" id="myTab"></ul>
<!-- 显示内容列表,和Tab标签列表一一对应 -->
<div class="tab-content"></div>
</div>

  如上,#myTab是用来保存Tab标签页的,.tab-content用来保存iframe页面列表。下面举例说明里面的内容,例子中有两个Tab页,效果图如下 

  

  主要style样式表如下

<style type="text/css">
html,body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, code, form, fieldset, legend, input, button, textarea, p, blockquote, th, td{
margin: 0;
padding:0;
}
*{
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
ul, ol {
margin-top: 0;
margin-bottom: 10px;
}
a {
color: #428bca;
text-decoration: none;
}
.fa {
display: inline-block;
font-family: FontAwesome;
font-style: normal;
font-weight: normal;
line-height: 1;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
:before, :after {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
/*这是一个字体,可以自定义一个x图片*/
.fa-times:before {
content: "\f00d";
} .tabbable {
border: none;
margin-bottom: 10px;
}
.nav {
padding-left: 0;
margin-bottom: 0;
list-style: none;
}
.nav>li {
position: relative;
display: block;
}
.nav-tabs {
margin-bottom: 0;
margin-left: 0;
border: 0;
top: 2px;
background-color: #f3f3f3;
-webkit-box-shadow: 0 0 4px rgba(0,0,0,.3);
-moz-box-shadow: 0 0 4px rgba(0,0,0,.3);
box-shadow: 0 0 4px rgba(0,0,0,.3);
border-bottom: 1px solid #ddd;
}
.nav-tabs>li {
float: left;
margin-bottom: 0px;
margin-left: 5px;
}
.nav-tabs li i {
position: relative;
margin-left: 10px;
cursor: pointer;
}
.nav-tabs li [class*=" fa-"], .nav-tabs li [class^="fa-"] {
width: 1.25em;
display: inline-block;
text-align: center;
}
#myTab {
height: 40px;
overflow: hidden;
}
#myTab > li {
height: 35px;
overflow: hidden;
margin-top: 5px;
background: #dedede;
background: rgba(0,0,0,0.05);
color: #777;
}
#myTab > li.active, #myTab>li:hover, #myTab>li:focus {
background-color: #fff;
border-bottom-color: transparent;
box-shadow: 0 -2px 3px 0 rgba(0,0,0,.15);
}
#myTab > li > a {
position: relative;
display: inline-block;
white-space: nowrap;
overflow: hidden;
padding: 8px 0px 8px 10px;
margin: 0 20px 0 0;
border-top: 0px;
box-shadow: none;
background: transparent;
line-height: 17px;
border: 0;
max-width: 108px;
color: #777;
}
#myTab > li.active {
border-top: 2px solid #2dc3e8;
}
#myTab li [class*=" fa-"], #myTab li [class^="fa-"] {
vertical-align: middle;
margin-left: 0px;
position: absolute;
right: 2px;
margin-top: 10px;
}
.tab-content {
background: none;
padding: 0;
padding-top: 5px;
position: relative;
}
.tab-content>div{
display: none;
}
.tab-content>.active {
display: block;
}
</style>

  标签内容如下  

<div class="tabbable" id="tabs">
  <!-- 页面标签列表 -->
  <ul class="nav nav-tabs" id="myTab">
    <li id="tab-0" class="">
      <a data-toggle="tab" href="#tab-content-0" style="width: 518px; padding-left: 10px;"> 首页 </a>
      <i class="fa fa-times" onclick="deleteTab(0)"></i>
    </li>
    <li id="tab-10301" class="active">
      <a data-toggle="tab" href="#tab-content-10301" style="width: 518px; padding-left: 10px;">动向汇报</a>
      <i class="fa fa-times" onclick="deleteTab(10301)"></i>
    </li>
  </ul>
  <!-- 页面内容列表,和页面标签列表对应 -->
  <div class="tab-content">
    <div class=" " id="tab-content-0">
      <iframe id="iframepage0" name="iframepage1" width="100%" frameborder="0" scrolling="no" src="/business/system/manage/welcome/list/page" height="311"></iframe>
    </div>
    <div id="tab-content-10301" class="active">
      <iframe id="iframepage4" name="iframepage5" width="100%" frameborder="0" scrolling="no" src="/business/workReport/manage/list/myPage" height="311"></iframe>
    </div>
  </div>
</div>

  看上面黑色粗体字,tab标签列表中的a元素的href属性即是对应的页面内容DIV标签的id。tab标签li和内容标签div默认都是隐藏的,通过添加class active来使之显示出来。

实现点击切换显示tab显示的代码为

//切换tab页的显示
$(document).on('click','#myTab > li',function(e){
//清除原来显示的tab页
var oldTab = $("#myTab li.active").removeClass("active").find("a[data-toggle='tab']");
$(oldTab.attr("href")).removeClass("active"); //设置新的显示tab页
var newTab = $(this).addClass("active").find("a[data-toggle='tab']");
$(newTab.attr("href")).addClass("active"); refreshTabHistory(false/*isDelete*/,$(this).attr('id').substring(4));
})
//手动调用切换到要显示的tab页,当前的action只支持show
//eg:$("#tab-0 a[data-toggle='tab']").tab("show");
$.fn.tab = function(action){
if(action == "show"){
$(this).parent().click();
}
}

新增和删除tab页

var currentTabId = '';//当前焦点Tab
//在非左侧菜单栏弹出的tab页也会用到该数据,如common.js中的pageForward函数
var pageCounter = 0;
/*
id: tab页签的html标签ID属性格式为"tab-"+id,内容容器的html标签ID格式为"tab-content-"+id
text: tab页签的显示文本
url: 打开的iframe的url
innerTab: 是否是内部弹出页(打开的tab页触发添加新的tab页),默认为undefined/false
*/
function addTab(id,text,url,innerTab) {
//如果某个页面已经打开,则切换到该页显示即可,不会新添加tab页
if($('#myTab #tab-'+id).length > 0){
$('#myTab #tab-' + id + ' a').tab('show');
}else{
var tab_id = "tab-" + id,
tab_content_id = "tab-content-"+id; //添加tab页签
$("#myTab > li").removeClass("active");
$("#myTab").append("<li id='" + tab_id + "' class='active'><a data-toggle='tab' href='#"
+ tab_content_id + "'>" + text + "</a>"
+ ("<i class='fa fa-times' onclick='deleteTab(\"" + id + "\")'></i>") + "</li>"); //添加新的内容显示
$(".tab-content > div").removeClass("active");
$(".tab-content").append("<div id='"+ tab_content_id +"' class='active'>"
+ "<iframe id='iframepage" + (pageCounter++) + "' name='iframepage" + (pageCounter++)
+ "' width='100%' frameborder='0' scrolling='no' src='" + url + "'></iframe></div>");
}
//刷新切换tab的历史记录
refreshTabHistory(false/*isDelete*/,id);
//重新设置tab页签的宽度
refreshWidth();
}
//参数id为tab的标志,但是并不是tab页的id属性,真正的id属性值是"tab-"+id
function deleteTab(id){
var tabJQ = $("#tab-"+id),
tabContentJQ = $("#tab-content-" + id); if(!tabJQ.hasClass("active")){
tabJQ.remove();
tabContentJQ.remove();
refreshTabHistory(true/*isDelete*/,id);
}else{
tabJQ.remove();
tabContentJQ.remove();
refreshTabHistory(true/*isDelete*/,id);
$('#tab-' + currentTabId + ' > a').tab('show').click();
}
refreshWidth();
}
//关闭当前tab页的快速方法
function closeCurrentTab(){
deleteTab(currentTabId);
}

新增、修改、切换tab的历史记录刷新函数

/*
刷新页签切换历史
isdelete: 是否是删除tab页签,true:是,false:否
curTabId:要处理的tab页签的id,tab页签html标签元素的ID属性格式为"tab-"+curTabId
*/
function refreshTabHistory(isdelete,curTabId){
if(!refreshTabHistory.histoty){
//用来记录用户点击tab的历史
refreshTabHistory.histoty = [];
}
var index = 0,
leng = refreshTabHistory.histoty.length;
//查找传入的tab页签在历史记录中的位置
for(; index < leng; index++){
if(refreshTabHistory.histoty[index] == curTabId){
break;
}
} //如果是删除页签,直接在历史记录中删除即可,历史记录的其他页签的顺序不变
if(isdelete){
refreshTabHistory.histoty.splice(index,1); //如果是新增页签,先保证历史记录中没有改页签(有就删掉),然后将新增的页签放在历史记录的最后面(即该页签为最新)
}else{
if(index < leng) {
refreshTabHistory.histoty.splice(index,1);
}
refreshTabHistory.histoty.push(curTabId);
}
currentTabId = refreshTabHistory.histoty[refreshTabHistory.histoty.length - 1];
}

  每一个页签的构成如下

  

  可以看到tab页签的margin-left和关闭按钮是必须要有的,所以tab页签的最小宽度为25px。唯一可以设置宽度的是tab页签的名称显示部分(也就是css选择器#myTab > li > a对应的DOM元素),我们必须保证每个tab页签的宽度相同。

  本实例处理为:默认tab页签名称元素a标签的最大宽度是108px。随着页签的增多,宽度不够用的时候先a标签的内容部分的宽度,当a标签的内容部分的宽度为0后开始缩减a标签的padding-left,直到padding-left为0为止。当页签过多的时候(每个页签至少25px,那么宽度总会到不够用的时候),我们没有考虑这种情况的处理,试想谁会打开这么多页签,这会让浏览器都卡住了。源码如下

//刷新重置tab页签的宽度
function refreshWidth(){
var panelWidth = $('#myTab').width() - 20/*可能存在的滚动条宽度*/,
tabs = $('#myTab > li'),
tabContentAverageWidth = 0/*tab > a标签的宽度*/,
minTabAverageWidth = 25/*margin-left:5,X按钮宽度为20*/,
zeroContentTabWidth = 35/*当tab > a标签宽度为0时tab标签对应的宽度是30px,外加上margin-left:5*/,
aPaddingLeft = 10/*tab > a标签的padding-left默认是10,当averageWidth< 35需要调整*/; averageWidth = parseInt(panelWidth/(tabs.length),10);//
if(averageWidth >= zeroContentTabWidth){
tabContentAverageWidth = averageWidth - zeroContentTabWidth; /*35 > averageWidth >= 25*/
}else if(averageWidth >= minTabAverageWidth){
tabContentAverageWidth = 0;
aPaddingLeft = averageWidth - minTabAverageWidth; //averageWidth < 25
}else{
tabContentAverageWidth = 0;
aPaddingLeft = 0;
}
//tab页签名称元素a标签的宽度和padding-left。这个是在box-sizing:border-box。的情况下
tabs.find('>a').css({'width':(tabContentAverageWidth + aPaddingLeft),'padding-left':aPaddingLeft});
}

  完整源码,里面有一个测试例子

<!DOCTYPE html>
<html lang="ch-cn">
<head>
  <meta charset="utf-8">
  <script type="text/javascript" src='jquery-1.9.1.js'></script>
<style type="text/css">
html,body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, code, form, fieldset, legend, input, button, textarea, p, blockquote, th, td{
margin: 0;
padding:0;
}
*{
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
ul, ol {
margin-top: 0;
margin-bottom: 10px;
}
a {
color: #428bca;
text-decoration: none;
}
.fa {
display: inline-block;
font-family: FontAwesome;
font-style: normal;
font-weight: normal;
line-height: 1;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
:before, :after {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
/*这是一个字体,可以自定义一个x图片*/
.fa-times:before {
content: "\f00d";
} .tabbable {
border: none;
margin-bottom: 10px;
}
.nav {
padding-left: 0;
margin-bottom: 0;
list-style: none;
}
.nav>li {
position: relative;
display: block;
}
.nav-tabs {
margin-bottom: 0;
margin-left: 0;
border: 0;
top: 2px;
background-color: #f3f3f3;
-webkit-box-shadow: 0 0 4px rgba(0,0,0,.3);
-moz-box-shadow: 0 0 4px rgba(0,0,0,.3);
box-shadow: 0 0 4px rgba(0,0,0,.3);
border-bottom: 1px solid #ddd;
}
.nav-tabs>li {
float: left;
margin-bottom: 0px;
margin-left: 5px;
}
.nav-tabs li i {
position: relative;
margin-left: 10px;
cursor: pointer;
}
.nav-tabs li [class*=" fa-"], .nav-tabs li [class^="fa-"] {
width: 1.25em;
display: inline-block;
text-align: center;
}
#myTab {
height: 40px;
overflow: hidden;
}
#myTab > li {
height: 35px;
overflow: hidden;
margin-top: 5px;
background: #dedede;
background: rgba(0,0,0,0.05);
color: #777;
}
#myTab > li.active, #myTab>li:hover, #myTab>li:focus {
background-color: #fff;
border-bottom-color: transparent;
box-shadow: 0 -2px 3px 0 rgba(0,0,0,.15);
}
#myTab > li > a {
position: relative;
display: inline-block;
white-space: nowrap;
overflow: hidden;
padding: 8px 0px 8px 10px;
margin: 0 20px 0 0;
border-top: 0px;
box-shadow: none;
background: transparent;
line-height: 17px;
border: 0;
max-width: 108px;
color: #777;
}
#myTab > li.active {
border-top: 2px solid #2dc3e8;
}
#myTab li [class*=" fa-"], #myTab li [class^="fa-"] {
vertical-align: middle;
margin-left: 0px;
position: absolute;
right: 2px;
margin-top: 10px;
}
.tab-content {
background: none;
padding: 0;
padding-top: 5px;
position: relative;
}
.tab-content > div{
display: none;
}
.tab-content > div.active{
display: block;
}
</style>
</head>
<body> <div class="tabbable" id="tabs" style="border:none;">
<!-- 页面标签列表 -->
<ul class="nav nav-tabs" id="myTab">
</ul>
<!-- 页面内容列表,和页面标签列表对应 -->
<div class="tab-content">
</div>
</div>
</body>
<script type="text/javascript"> //切换tab页的显示
$(document).on('click','#myTab > li',function(e){
//清除原来显示的tab页
var oldTab = $("#myTab li.active").removeClass("active").find("a[data-toggle='tab']");
$(oldTab.attr("href")).removeClass("active"); //设置新的显示tab页
var newTab = $(this).addClass("active").find("a[data-toggle='tab']");
$(newTab.attr("href")).addClass("active"); refreshTabHistory(false/*isDelete*/,$(this).attr('id').substring(4));
})
//手动调用切换到要显示的tab页,当前的action只支持show
//eg:$("#tab-0 a[data-toggle='tab']").tab("show");
$.fn.tab = function(action){
if(action == "show"){
$(this).parent().click();
}
} var currentTabId = '';//当前焦点Tab
//在非左侧菜单栏弹出的tab页也会用到该数据,如common.js中的pageForward函数
var pageCounter = 0;
/*
id: tab页签的html标签ID属性格式为"tab-"+id,内容容器的html标签ID格式为"tab-content-"+id
text: tab页签的显示文本
url: 打开的iframe的url
innerTab: 是否是内部弹出页(打开的tab页触发添加新的tab页),默认为undefined/false
*/
function addTab(id,text,url,innerTab) {
//如果某个页面已经打开,则切换到该页显示即可,不会新添加tab页
if($('#myTab #tab-'+id).length > 0){
$('#myTab #tab-' + id + ' a').tab('show');
}else{
var tab_id = "tab-" + id,
tab_content_id = "tab-content-"+id; //添加tab页签
$("#myTab > li").removeClass("active");
$("#myTab").append("<li id='" + tab_id + "' class='active'><a data-toggle='tab' href='#"
+ tab_content_id + "'>" + text + "</a>"
+ ("<i class='fa fa-times' onclick='deleteTab(\"" + id + "\")'></i>") + "</li>"); //添加新的内容显示
$(".tab-content > div").removeClass("active");
$(".tab-content").append("<div id='"+ tab_content_id +"' class='active'>"
+ "<iframe id='iframepage" + (pageCounter++) + "' name='iframepage" + (pageCounter++)
+ "' width='100%' frameborder='0' scrolling='no' src='" + url + "'></iframe></div>");
}
//刷新切换tab的历史记录
refreshTabHistory(false/*isDelete*/,id);
//重新设置tab页签的宽度
refreshWidth();
}
//参数id为tab的标志,但是并不是tab页的id属性,真正的id属性值是"tab-"+id
function deleteTab(id){
var tabJQ = $("#tab-"+id),
tabContentJQ = $("#tab-content-" + id); if(!tabJQ.hasClass("active")){
tabJQ.remove();
tabContentJQ.remove();
refreshTabHistory(true/*isDelete*/,id);
}else{
tabJQ.remove();
tabContentJQ.remove();
refreshTabHistory(true/*isDelete*/,id);
$('#tab-' + currentTabId + ' > a').tab('show').click();
}
refreshWidth();
}
//关闭当前tab页的快速方法
function closeCurrentTab(){
deleteTab(currentTabId);
} /*
刷新页签切换历史
isdelete: 是否是删除tab页签,true:是,false:否
curTabId:要处理的tab页签的id,tab页签html标签元素的ID属性格式为"tab-"+curTabId
*/
function refreshTabHistory(isdelete,curTabId){
if(!refreshTabHistory.histoty){
//用来记录用户点击tab的历史
refreshTabHistory.histoty = [];
}
var index = 0,
leng = refreshTabHistory.histoty.length;
//查找传入的tab页签在历史记录中的位置
for(; index < leng; index++){
if(refreshTabHistory.histoty[index] == curTabId){
break;
}
} //如果是删除页签,直接在历史记录中删除即可,历史记录的其他页签的顺序不变
if(isdelete){
refreshTabHistory.histoty.splice(index,1); //如果是新增页签,先保证历史记录中没有改页签(有就删掉),然后将新增的页签放在历史记录的最后面(即该页签为最新)
}else{
if(index < leng) {
refreshTabHistory.histoty.splice(index,1);
}
refreshTabHistory.histoty.push(curTabId);
}
currentTabId = refreshTabHistory.histoty[refreshTabHistory.histoty.length - 1];
} //刷新重置tab页签的宽度
function refreshWidth(){
var panelWidth = $('#myTab').width() - 20/*可能存在的滚动条宽度*/,
tabs = $('#myTab > li'),
tabContentAverageWidth = 0/*tab > a标签的宽度*/,
minTabAverageWidth = 25/*margin-left:5,X按钮宽度为20*/,
zeroContentTabWidth = 35/*当tab > a标签宽度为0时tab标签对应的宽度是30px,外加上margin-left:5*/,
aPaddingLeft = 10/*tab > a标签的padding-left默认是10,当averageWidth< 35需要调整*/; averageWidth = parseInt(panelWidth/(tabs.length),10);//
if(averageWidth >= zeroContentTabWidth){
tabContentAverageWidth = averageWidth - zeroContentTabWidth; /*35 > averageWidth >= 25*/
}else if(averageWidth >= minTabAverageWidth){
tabContentAverageWidth = 0;
aPaddingLeft = averageWidth - minTabAverageWidth; //averageWidth < 25
}else{
tabContentAverageWidth = 0;
aPaddingLeft = 0;
}
//tab页签名称元素a标签的宽度和padding-left。这个是在box-sizing:border-box。的情况下
tabs.find('>a').css({'width':(tabContentAverageWidth + aPaddingLeft),'padding-left':aPaddingLeft});
} //测试代码
for(var i = 0; i < 11; i++){
addTab(i,"test" + i,"http://www.baidu.com");
}
</script>
</html>

  如果觉得本文不错,请点击右下方【推荐】!

  

多iframe使用tab标签方式添加、删除、切换的处理实例的更多相关文章

  1. 推荐一个好用的以多tab标签方式打开windows CMD的工具

    最近我在做基于nodejs的微服务开发,需要在windows命令行里启动很多微服务.我的windows 10任务栏是这样子的: 我想找一款能像下图Chrome标签页这样打开windows 10 CMD ...

  2. javascript--select标签的添加删除功能的使用

    在网页开发中,常常遇见这种问题,给定两个框,A和B,和几个图片按钮,A中存在几个操作,点击图片按钮,填加至B中,或者从B中移除等,这种效果如何实现,本文加以总结. 几种效果图如下: 原始图:      ...

  3. zookeeper动态添加/删除集群中实例(zookeeper 3.6)

    一,用来作为demo操作的zookeeper集群中的实例: 机器名:zk1 server.1=172.18.1.1:2888:3888 机器名:zk2 server.2=172.18.1.2:2888 ...

  4. ElementUI使用v-if控制tab标签显示遇到的Duplicate keys detected: 'xxx'问题

    今天工作遇到一个问题: 需求背景:页面中有几个tab,需要根据登录用户的权限控制tab标签的显示与隐藏 . <el-tabs @tab-click="handleClick" ...

  5. Vue指令:v-for的用法;v-bind绑定class的几种写法;tab标签切换

    一.v-for 的用法 循环指令,可以遍历 Number.String.Object.Array: 循环数字.字符串:有2个参数,分别是value和索引值: 循环对象:有3个参数,分别是 属性值.属性 ...

  6. easyui学习笔记12—tab标签页的添加和删除

    这一篇我们来看看标签页的添加和删除动作.我在想看这些例子还不如看文档,文档的内容更加全面,但是文档全部是理论没有实际的操作,看起来很枯燥,文档只能是遇到问题的时候查.easyui的文档写的还是很详细的 ...

  7. Jquery LigerUI框架学习(二)之Tree于Tab标签实现iframe功能

    LigerUI框架Tree于Tab标签动态使用,当点击Tree后动态创建Tab标签,和通常用的iframe框架功能类似 Tree中的关键代码 //Tree初始化 $("#tree1" ...

  8. Android两种为ViewPager+Fragment添加Tab的方式

    在Android开发中ViewPager的使用是非常广泛的,而它不仅仅能够实现简单的开始引导页,还可以结合Fragment并添加Tab作为选项卡或为显示大批量页面实现强大的顺畅滑动 下面介绍两种为Vi ...

  9. tab一些 添加 删除 搜索

    tab一些 添加 删除 搜索 案例 <!DOCTYPE html><html lang="en"><head> <meta charset ...

随机推荐

  1. Replication的犄角旮旯(二)--寻找订阅端丢失的记录

    <Replication的犄角旮旯>系列导读 Replication的犄角旮旯(一)--变更订阅端表名的应用场景 Replication的犄角旮旯(二)--寻找订阅端丢失的记录 Repli ...

  2. Spring2:bean的使用

    前言 Spring最基础的功能就是一个bean工厂,所以本文讲解的是Spring生成bean的种种方法及细节,Spring配置文件的名字是bean.xml,定义几个类: 一个Person类: publ ...

  3. 使用ACE_Get_Opt解析命令行

    当我们用C++开发一些C++控制台小工具时,会需要一些用户输入的参数来决定程序如何工作和执行,而用户输入参数的方式大部分都是采用命令行参数的方式. 比如上一篇文章 玩转Windows服务系列--命令行 ...

  4. FusionCharts简单教程(三)-----FusionCharts的基本属性

          通过前面两章的讲解我们可以制作出简单的图像,但是有时候我们需要对图像进行一个精确的规划,比如设置背景颜色.设置提示信息.设置间隔颜色等等,这时就需要我们对FusionCharts的细节有比 ...

  5. 微信授权步骤与详解 -- c#篇

    微信授权步骤与详解 -- c#篇 注:这里不涉及界面操作,只介绍代码操作. 1.基本原理如下: 从图上所知,第一步用户访问我们的网页,第二步我们后台跳转到微信授权页面,第三步用户点击授权,第四步微信重 ...

  6. 302 Moved Temporarily

    这个就是表示 重定向!! 不过,302在不同HTTP协议下的状态信息不同. Moved temporarily (redirect) 你所连接的页面进行了Redirect Found 类似于301,但 ...

  7. Atitit 信用卡与会员卡(包括银行卡)的发展之路

    Atitit 信用卡与会员卡(包括银行卡)的发展之路 实现跨机构卡片内金额的流动解决方案 1.1. 财务卡片本质上都是会员卡1 1.2. 卡片的发展阶段1 2. 实现跨机构卡片内金额的流动解决方案(加 ...

  8. 发布iOS应用程序到苹果APP STORE完整流程

    参考:http://blog.csdn.net/mad1989/article/details/8167529(xcode APP 打包以及提交apple审核详细流程(新版本更新提交审核)) http ...

  9. webService 基础

    一. 1. 定义:Web service是一个平台独立的,跨语言.跨平台.低耦合的,自包含的.基于可编程的web的应用程序,可使用开放的XML (标准通用标记语言下的一个子集)标准来描述.发布.发现. ...

  10. MongoDB 简介

    MongoDB 简介 介绍:MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案.特点:高性能.易部署.易使用,存储数据非常方便.主要功 ...