IOS-网络(网页开发-UIWebView,HTML,CSS,JavaScript,OC和JS代码互调)
一、网页基础
//
// ViewController.m
// IOS_0218_网页开发1
//
// Created by ma c on 16/2/18.
// Copyright © 2016年 博文科技. All rights reserved.
// #import "ViewController.h" @interface ViewController () @property (weak, nonatomic) IBOutlet UIWebView *webView; @end @implementation ViewController /*
一、UIWebView
1.什么是UIWebView
1>UIWebView是IOS内置浏览器控件
2>系统自带的Safari浏览器就是通过UIWebView实现的 2.UIWebView不但能加载远程的网页资源,还能在家大部分常见文件
1>html\htm
2>pdf\doc\ppt\txt
3>... 二、网页的组成
1.HTML(网页的具体内容和结构)
2.CSS(网页的样式,美化网页最重要的一块)
3.JavaScript(网页的交互效果,比如对用户鼠标事件做出响应)
4.学习资料:http://www.w3school.com.cn/ 三、HTML
1.全称:Hyper Text Markup Language,超文本标记语言
2.其实就是文本,由浏览器将它解析成具体网页内容
3.HTML组成:N个标签组成
5.语法松散,最新版本HTML5
6.常见标签:
1>标题:h1,h2,h3
2>段落:p
3>换行:br
4>容器:div,span(容纳其他标签)
5>表格:table,tr,td
6>列表:ul,ol,li
7>图片:img
8>表单:input
9>链接:a
7.编辑工具:dreamweaver,WebStorm 四、CSS
1.全称:Cascading Style Sheets,层叠样式表
2.作用:美化网页
3.CSS编写格式:键值对形式
4.三种书写形式:
1>行内样式:(内联样式)直接在标签的style属性中写
<body style = "color: red;">
2>内页样式:在本网页的style属性中写
<style type = "text/css">
body{
color: red;
}
</style>
3>外部样式:在单独的CSS文件中写,然后在网页中用link标签引用
<link rel = "stylesheet" href = "test.css"> 五、CSS选择器
1.标签选择器 - 选择对应的标签,为之添加样式
2.类选择器 - 在标签后加class属性,用.类名添加样式
3.id选择器 - 在标签后加id属性,用#id名添加样式
4.群组选择器 - 格式:标签,.类名,#id名添加样式
5.选择器组合 - 格式:标签.类名 或者 标签#id名
6.后代选择器 - 格式:标签 子标签,标签 子标签
7.子标签选择器 - 格式:标签 > 子标签(直接子标签)
8.相邻兄弟选择器 - 格式:标签 + 标签
9.属性选择器 - 格式:标签[属性] 或者 标签[属性][属性] 或者 标签[属性 = “属性名”]
10.伪类
1>:active 向被激活的元素添加样式
2>:focus 想拥有键盘输入焦点的元素添加样式
3>:hover 当鼠标悬浮在元素上方时,向元素添加样式
4>:link 向未被访问的链接添加样式
5>:visited 向已被访问的链接添加样式
6>:first-child 向元素的第一个子元素添加样式
7>:lang 向带有指定lang属性的元素添加样式
11.伪元素
1>:first-letter 向文本的第一个字母添加特殊样式
2>:first-line 向文本的首行添加特殊样式
3>:before 在元素之前添加内容
4>:after 在元素之后添加内容 六、选择器优先级
1.优先级排序:
1>important>内联>id>类>标签|伪类|伪元素>通配符>继承
2.选择器的针对性越强,它的优先级越高
3.选择器的权值
1>通配选择符(*):0
2>标签:1
3>类:10
4>属性:10
5>伪类:10
6>伪元素:1
7>id:10
8>!important:100
4.原则:选择器权值加在一起,大的优先;如果相同,后定义的优先 七、HTML标签类型(三大类)
1>块级标签:独占一行的标签
块级元素水平居中:设置自己的margin:0px auto
2>行内标签:多个行内标签能显示在一行
非块级元素水平居中:设置父类标签,text-align:center
3>行内-块级标签 八、修改标签的显示类型
1.CSS中有个display属性,能修改标签的显示类型
1>none:隐藏标签
2>block:块级类型,能随时设置宽度和高度
3>inline:行内类型,宽高取决于内容尺寸
4>inline-block:行内-块级类型 九、CSS属性
1.根据继承分类(两类)
1>可继承属性
父标签的属性值会传递给子标签 - 一般是文字属性
2>不可继承属性
父标签的属性值不能传递给子 - 一般是区块控制属性
2.所有标签可继承
visibility,cursor
3.内联标签可继承
letter-spacing,word-spacing,white-space,line-height,color,font,font-family,font-size,font-style,
font-variant,font-weight,text-decoration,text-transform,direction
4.块级标签可继承
text-indent,text-align
5.列表标签可继承
list-style,list-style-type,list-style-position,list-style-image
6.不可继承
display,margin,border,padding,background,
height,min-height,max-height,width,min-width,max-width
overflow,position,left,right,top,bottom,z-index
float,clear
table-layout,vertical-align
page-break-after,page-bread-before
unicode-bidi 十、盒子模型
1.网页上每个标签都是一个盒子
2.每个盒子有四个属性
1>内容(content)
属性:
height
width
max-height
max-width
min-height
min-width
2>填充(padding,内边距)
属性
padding
padding-bottom
padding-left
padding-right
padding-top
3>边框(border,盒子本身)
属性
border-width
border-style
border-color
border-radius
4>边界(margin,外边距)
属性
margin
margin-bottom
margin-left
margin-right
margin-top 十一、CSS布局
1.默认情况下,所有的网页都在标准流布局中
1>从上到下,从左到右
2.脱离标准流的方法
1>float属性
2>position属性和left,right,top,bottom属性
3.position属性值
1>absolute:生成绝对定位元素,相对于static定位以外的第一个父元素进行定位。元素的位置通过eft,right,top,
bottom属性进行规定
2>fixed:生成绝对定位元素,相对于浏览器窗口进行定位。元素的位置通过eft,right,top,bottom属性进行规定
3>relative:生成相对定位元素,相对于其正常位置进行定位
4>static:默认值,没有定位,元素出现在正常流中
5>inherit:规定应该从父元素继承position属性的值
4.子绝父相:子元素相对于父元素进行定位
*/ - (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor cyanColor]; [self loadWebView];
} - (void)loadWebView
{
//伸缩页面填充整个webView
self.webView.scalesPageToFit = YES; //NSURL *url = [NSURL URLWithString:@"http://localhost:8080/MJServer/"];
NSURL *url = [[NSBundle mainBundle] URLForResource:@"01-学前须知" withExtension:@"pptx"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[self.webView loadRequest:request];
} @end
二、JavaScript和UIWebView代理
//
// ViewController.m
// IOS_0219_网页开发2
//
// Created by ma c on 16/2/19.
// Copyright © 2016年 博文科技. All rights reserved.
// #import "ViewController.h" @interface ViewController ()<UIWebViewDelegate> @property (weak, nonatomic) IBOutlet UIBarButtonItem *forwardItem;
@property (weak, nonatomic) IBOutlet UIBarButtonItem *rewindItem; - (IBAction)rewind:(id)sender;
- (IBAction)forward:(id)sender; @property (nonatomic, weak) UIWebView *webView; @end
/*
一、JavaScript
1.定义:JavaScript是一门广泛应用于浏览器客户端的脚本语言
1>Netspace公司设计,当时与sun公司合作,所以名字有点像java
2>业内一般称JS 2.JS常见用途
HTML DOM操作(节点操作,比如添加,修改,删除节点)
给HTML网页增加动态功能,比如动画
事件处理:监听鼠标点击,鼠标滑动,键盘输入 3.JS的书写形式
1>常见书写形式(2种)
a.页内JS:在当前网页的script标签中写
<script type="text/javascript">
</script>
b.页外JS
<script src="index.js"></script> 4.JS基本操作(CRUD)
1>C(create)
var div = document.createElement('div');
document.body.appendChild(div);
2>R(read)
var div = document.getElementById('logo');
var div = document.getElementsByTagName('div')[0];
var div = document.getElementsByClassName('logo')[0];
3>U(update)
var img = document.getElementById('logo');
img.src = 'images/01.png';
4>D(delete)
var img = document.getElementById('logo');
img.parentNode.removeChild(img); 5.事件绑定
1>推荐做法
var button = document.getElementById('login')
button.onclick = function{
点击按钮想实现的事
}
2>直接写在标签内部
<button onclick="var age = 10;alert(age);">登录</button>
3>不常用
function login{
点击按钮想实现的事
}
var button = document.getElementById('login')
button.onclick = login; 二、jQuery
1.通过选择器查找元素
1>$('选择器') - jQuery支持大部分的CSS选择器 2.属性操作
1>获得属性:$('选择器').attr('属性名');
2>设置属性:$('选择器').attr('属性名','属性值'); 3.显示和隐藏
1>显示:$('选择器').show();
2>隐藏:$('选择器').hide();
3>显示和隐藏来回切换:$('选择器').toggle(); 4.事件绑定
1>点击事件
a.
$('选择器').click(function(){
//实现点击按钮所要做的事
}) b.
function login{
点击按钮想实现的事
}
$('选择器').click(login) 三、参考手册
1.www.w3school.com
2.http://www.w3school.com.cn/jquery/jquery_reference.asp
3.http://jquery.cuishifeng.cn
4.http://www.jb51.net/shouce/jquery1.82/ 四、HTML5的框架
1.概念
有了HTML5的框架,编写简易的几行代码,就能实现非常漂亮的手机界面
HTML5框架封装了大量的DOM节点操作,封装了大量的CSS样式
2.常见的HTML5框架
1>PhoneGap
2>jQuery Mobile
3>sencha-touch */ @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad]; [self createWebView];
} - (void)createWebView
{
//1.创建webView
UIWebView *webview = [[UIWebView alloc] init];
webview.scalesPageToFit = YES;
CGRect frame = self.view.frame;
//frame.origin.y = 64;
webview.frame = frame;
[self.view addSubview:webview]; //2.加载请求
NSURL *url = [[NSBundle mainBundle] URLForResource:@"web" withExtension:@"xml"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[webview loadRequest:request]; //3.设置代理
webview.delegate = self; self.webView = webview;
} #pragma mark - UIWebViewDelegate
//网页加载完毕
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
self.rewindItem.enabled = [webView canGoBack]; NSLog(@"webViewDidFinishLoad");
} - (void)webViewDidStartLoad:(UIWebView *)webView
{
NSLog(@"webViewDidStartLoad");
} - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
NSLog(@"didFailLoadWithError");
}
//一般用来拦截webView发出的所有请求(加载新的网页)
//每当webView即将发送一个请求之前,会先调用这个方法
//YES允许发送这个请求
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
/*
URL格式:协议头://主机名/路径
request.URL.path:获得的是主机名后面的路径
request.URL.absoluteString:获得的是一个完整的URL字符串
*/
return YES;
} - (IBAction)rewind:(id)sender {
[self.webView goBack];
}
- (IBAction)forward:(id)sender {
[self.webView goForward];
}
@end
三、OC调用JS代码(利用UIWebView)
//
// ViewController.m
// IOS_0229_利用webView加载JS代码
//
// Created by ma c on 16/2/19.
// Copyright © 2016年 博文科技. All rights reserved.
// #import "ViewController.h" @interface ViewController ()<UIWebViewDelegate> @property (nonatomic, weak) UIActivityIndicatorView *loadingView; @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
[self createWebView];
} - (void)createWebView
{
//1.创建webView
UIWebView *webView = [[UIWebView alloc] init];
webView.frame = self.view.frame;
webView.delegate = self;
//隐藏scrollView
webView.scrollView.hidden = YES;
[self.view addSubview:webView];
webView.scalesPageToFit = YES; //2.加载网页
NSURL *url = [NSURL URLWithString:@"http://m.dianping.com/tuan/deal/5501525"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[webView loadRequest:request]; //3.创建
UIActivityIndicatorView *loadingView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
loadingView.center = self.view.center;
[loadingView startAnimating];
[self.view addSubview:loadingView];
self.loadingView = loadingView;
}
//OC->JS(OC调用JS)
#pragma mark - UIWebViewDelegate
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
//执行JS代码,将大众点评中多余的节点删除掉 //拿到所有节点内容
NSString *html = [webView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML"];
NSLog(@"%@",html); NSMutableString *js1 = [NSMutableString string]; // 0.删除顶部的导航条
[js1 appendString:@"var header = document.getElementsByTagName('header')[0];"];
[js1 appendString:@"header.parentNode.removeChild(header);"]; //1.删除底部链接
[js1 appendString:@"var footer = document.getElementsByTagName('footer')[0];"];
[js1 appendString:@"footer.parentNode.removeChild(footer);"];
// NSLog(@"%@",js1);
[webView stringByEvaluatingJavaScriptFromString:js1]; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.25 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
NSMutableString *js2 = [NSMutableString string];
//2.删除浮动的广告
[js2 appendString:@"var list = document.body.childNodes;"];
[js2 appendString:@"var len = list.length;"];
[js2 appendString:@"var banner = list[len-1];"];
[js2 appendString:@"banner.parentNode.removeChild(banner);"];
[webView stringByEvaluatingJavaScriptFromString:js2]; //显示scrollView
webView.scrollView.hidden = NO;
//删除等待指示器
[self.loadingView removeFromSuperview];
});
} @end
四、JS调用OC代码
一、以前使用js调用object-c的方法
1.在UIWebview中载入的js代码中通过改变document.locations=“”, window.location.href=""
2.然后回调
UIWebview的-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType函数,
通过截取NSURLRequest解析js中传递过来的参数,再根据参数来选择早已定义好的方法。
index.html
<!--// Created by bowen on 15-3-19.-->
<!--// Copyright (c) 2014年 bowen. All rights reserved.--> <!DOCTYPE html> <html>
<head lang="en">
<meta charset="utf-8">
<title></title>
</head> <body>
<p></p>
<div>
<button onclick="fn_open_camera();">拍照</button>
</div> <p></p>
<div>
<button onclick="fn_call();">打电话</button>
</div>
<script> function fn_call(){
//调用OC中的call方法
window.location.href = 'bw://call';
} function fn_open_camera(){
//调用OC中的openCamera方法
window.location.href = 'bw://camera';
} </script>
</body>
</html>
ViewController.m
//
// ViewController.m
// JSCallOC
//
// Created by bowen on 15/11/17.
// Copyright © 2015年 bowen. All rights reserved.
// #import "ViewController.h" @interface ViewController ()<UIWebViewDelegate> @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
[self createWebView];
} - (void)createWebView
{
//1.创建WebView
UIWebView *webView = [[UIWebView alloc] init];
webView.frame = self.view.frame;
webView.delegate = self;
[self.view addSubview:webView]; //2.加载网页
NSURL *url = [[NSBundle mainBundle] URLForResource:@"index" withExtension:@"html"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[webView loadRequest:request];
} #pragma mark - UIWebViewDelegate
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSString *url = request.URL.absoluteString;
NSRange range = [url rangeOfString:@"bw://"];
NSUInteger loc = range.location;
if (loc != NSNotFound) {
//方法名
NSString *method = [url substringFromIndex:loc + range.length];
//转成SEL
SEL sel = NSSelectorFromString(method);
[self performSelector:sel withObject:nil];
}
return YES;
}
//打电话
- (void)call
{
NSLog(@"call");
}
//照相
- (void)camera
{
NSLog(@"camera");
} @end
二、利用javascriptCore.framework库
废话不多说,现在看看如何在UIWebView的javascript中调用oc的方法
首先在建立一个UIWebView,代码如下:
- //
- // webview.m
- // login
- //
- // Created by wangdan on 15-3-19.
- // Copyright (c) 2015年 wangdan. All rights reserved.
- //
- #import "webview.h"
- #import <JavaScriptCore/JavaScriptCore.h>
- @implementation webview
- -(id)initWithFrame:(CGRect)frame
- {
- self=[super initWithFrame:frame];
- if( self ){
- self.webview=[[UIWebView alloc]initWithFrame:CGRectMake(0, 310, self.bounds.size.width, 300)];
- self.webview.backgroundColor=[UIColor lightGrayColor];
- NSString *htmlPath=[[NSBundle mainBundle] resourcePath];
- htmlPath=[htmlPath stringByAppendingPathComponent:@"html/index.html"];
- NSURL *localURL=[[NSURL alloc]initFileURLWithPath:htmlPath];
- [self.webview loadRequest:[NSURLRequest requestWithURL:localURL]];
- [self addSubview:self.webview];
- JSContext *context = [self.webview valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
- context[@"log"] = ^() {
- NSLog(@"+++++++Begin Log+++++++");
- NSArray *args = [JSContext currentArguments];
- for (JSValue *jsVal in args) {
- NSLog(@"%@", jsVal);
- }
- JSValue *this = [JSContext currentThis];
- NSLog(@"this: %@",this);
- NSLog(@"-------End Log-------");
- };
- // [context evaluateScript:@"log('ider', [7, 21], { hello:'world', js:100 });"];
- }
- return self;
- }
- @end
(1)在上述代码中,使用javascriptCore.framework,首先使用UIWebview加载一个静态网页,并
使用
JSContext *context = [self.webview valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
获取该UIWebview的javascript执行环境。
(2)在该javascript执行环境中,定义一个js函数,注意关键点来了
这个函数的执行体完全是 objective-c代码写的,也就是下面:
- context[@"jakilllog"] = ^() {
- NSLog(@"Begin Log");
- NSArray *args = [JSContext currentArguments];
- for (JSValue *jsVal in args) {
- NSLog(@"%@", jsVal);
- }
- JSValue *this = [JSContext currentThis];
- NSLog(@"-------End Log-------");
- };
(3)试想一下,在定义的webview中,如果使用js执行log这个函数,那么会不会调用上面oc中block段代码呢,答案是肯定的!
下面看看UIWebView 中所加载的 html及其js代码是如何写的
(4)index.html代码
- <!--// Created by wangdan on 15-3-19.-->
- <!--// Copyright (c) 2014年 wangdan. All rights reserved.-->
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="utf-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <meta name="description" content="">
- <meta name="viewport" content="width=device-width; initial-scale=1.0">
- <script type="text/javascript" src="index.js"></script>
- </head>
- <button id="hallo" onclick="buttonClick()"> 点击button</button>
- </body>
- </html>
- 上面html定义了一个button,然后引用index.js,点击button的响应函数为buttonClick()
- 该函数在index.js中定义,如下
- function buttonClick()
- {
- jakilllog("hello world");
- }
意思是点击这个button,就调用jakilllog()函数,jakilllog()函数显然是我们在oc中实现的一个block段,
就是上述绿色部分的block段。
点击button会执行么?答案是肯定的。
下面上图
下图是执行的结果
点击html中的button,能够执行oc中的代码
说明直接从js调用oc的意图达到。
最近有很多朋友问我索要demo那么我把demo的地址上传到csdn
大家下载下来就很方便了。
转自:http://blog.csdn.net/j_akill/article/details/44463301
IOS-网络(网页开发-UIWebView,HTML,CSS,JavaScript,OC和JS代码互调)的更多相关文章
- iOS WKWebview 网页开发适配指南
iOS WKWebview 网页开发适配指南 微信iOS客户端将于2017年3月1日前逐步升级为WKWebview内核,需要网页开发者提前做好网站的兼容检查和适配.如有问题,可参考文末联系方式,向我们 ...
- ios网络学习------4 UIWebView的加载本地数据的三种方式
ios网络学习------4 UIWebView的加载本地数据的三种方式 分类: IOS2014-06-27 12:56 959人阅读 评论(0) 收藏 举报 UIWebView是IOS内置的浏览器, ...
- UIWebView中Html中用JS调用OC方法及OC执行JS代码
HTML代码: <html> <head> <title>HTML中用JS调用OC方法</title> <meta http-equiv=&quo ...
- iOS(UIWebView 和WKWebView)OC与JS交互 之二
在iOS应用的开发过程中,我们经常会使用到WebView,当我们对WebView进行操作的时候,有时会需要进行源生的操作.那么我记下来就与大家分享一下OC与JS交互. 首先先说第一种方法,并没有牵扯O ...
- [iOS Hybrid实践:UIWebView中Html中用JS调用OC方法,OC执行JS代码]
原理: 1.JS调用OC 每次webview执行跳转时都会被iOS给拦截,执行下面函数获得系统允许. 因此可以根据跳转信息转给系统,执行相应功能,比如打开相册等. // 网页中的每一个请求都会被触发 ...
- iOS WKWebview 网页开发适配指南【转】
微信iOS客户端将于2017年3月1日前逐步升级为WKWebview内核,需要网页开发者提前做好网站的兼容检查和适配.如有问题,可参考文末联系方式,向我们咨询. 背景 WKWebView 是苹果在iO ...
- 微信iOS WKWebview 网页开发适配指南
微信iOS客户端将于2017年3月1日前逐步升级为WKWebview内核,需要网页开发者提前做好网站的兼容检查和适配. 背景 WKWebView 是苹果在iOS 8中引入的新组件,目的是提供一个现代的 ...
- (五十九)iOS网络基础之UIWebView简易浏览器实现
[UIWebView网络浏览器] 通过webView的loadRequest方法可以发送请求显示相应的网站,例如: NSURL *url = [NSURL URLWithString:@"h ...
- iOS 混合网页开发 问题
在利用JavaScriptCore与H5交互时出现异常提示: This application is modifying the autolayout engine from a background ...
随机推荐
- 启动secondarynamenode时报错
环境: mac系统 + hadoop2.6.0-cdh5.7.0伪分布式 问题一: 在启动hdfs的secondarynamenode时,报错. 正常情况: sumengdeMacBook-Pro: ...
- Java设计原则—依赖倒置原则(转)
依赖倒置原则(Dependence Inversion Principle,DIP)的原始定义: 高层模块不应该依赖底层模块,两者都应该依赖其抽象: 抽象不应该依赖细节: 细节应该依赖抽象. 依赖倒置 ...
- Python3 计算城市距离
利用上一篇得到的城市经纬度算城市距离 import requests from math import radians, cos, sin, asin, sqrt def geocode(addres ...
- java中的重量级与轻量级概念
首先轻量级与重量级是一个相对的概念,主要是对应用框架使用方便性和所提供服务特性等方面做比较的. 比方说EJB就是一个重量级的框架,因为它对所编写的代码有限制,同时它也提供分布式等复杂的功能. 相比之下 ...
- Delphi7编译时,发生Access violation at address 00A7B628 in module 'dcc70.dll'. Read of address 00000000.(Delphi6升级到Delphi7)
最近接了一个项目,要求使用Delphi7来开发程序,可是由于我们之前均使用delphi6来开发程序的,而且Delphi6使用很长时间了,积累并改造了第三方控件很成熟了: 故把Delphi6的控件移植( ...
- windows上面非常好用的辅助软件
1.everything 快速查找本地文件 下载地址:http://www.voidtools.com/
- MysQL使用一与Python交互
与python交互 在熟练使用sql语句的基础上,开始使用python语言提供的模块与mysql进行交互 这是我们在工作中大事要做的事 先学会sql是基础,一定要熟练编写sql语句 安装引入模块 安装 ...
- Jenkins 安装教程
第一部分,安装Jenkins 1.首先在Jenkins repo yum源和Key [root@jenkins ~]# wget http://pkg.jenkins.io/redhat-stable ...
- 如何打开windows的远程桌面
WINDOWS 2003/XP 系列设置方法 右键点击[我的电脑]选择[属性],进入[系统属性]界面,点击[远程]选项卡,勾选[启用这台计算机上的远程桌面]即可. 2003/XP系统默认只允许计算机a ...
- 迟到的thuwc&noiwc2018总结
已经4个多月没写博客了呢. thuwc和noiwc都炸了,接下来的一段时间都没怎么写题,靠文化课和游戏麻醉自己.这篇博客也算是向之前自闭.颓废的自己告别吧.. 先写一发游记: thuwc:Day1炸, ...