㈠ 在java-web開發中怎樣在瀏覽器點擊後退按鈕時清空一個指定session對象
雖然不太懂java
但是web開發中,瀏覽器後退訪問的歷史緩存頁面,即不會連接伺服器交互數據,所以不可能觸發伺服器程序區清空session。
有一種常用做法是讓頁面立即過期,用戶後退時,提示頁面已過期。
㈡ Web前端開發知識點之JavaScript對象
今天小編要跟大家分享的文章是關於Web前端開發知識點之JavaScript對象。真正從事web前端工作的小夥伴們來小編一起看一看吧,希望本篇文章能夠對大家有所幫助。
1、Function對象
①對象的創建
Function對象的創建共有3種方法。
第一種方法格式如下,不符合我們寫代碼的習慣,不建議使用
varfun=newFunction(形式參數列表,方法體);
第二種方法格式如下:
function方法名稱(形式參數列表){方法體}
第三種方法格式如下:
var方法名稱=function(形式參數列表){方法體}
一般我們採用後兩種方法進行Function對象的創建。
②對象的屬性
·length屬性代表形參的個數
③對象的特點
·方法定義時,形式參數的類型不用寫,返回值類型也不寫。
·方法是一個對象,如果定義名稱相同的方法,會覆蓋。
·在JavaScript中、方法的調用只與方法的名稱有關,和參數列表無關
·在方法聲明中有一個隱藏的內置對象(數組)arguments封裝所有的實際參數
④對象的調用
方法名稱(實際參數列表);
2、Array對象
①對象的創建
Array數組對象也有三種創建方式,三種格式如下所示:
vararr=newArray(元素列表);vararr=newArray(默認長度);vararr=[元素列表];
②對象的方法
Array對象有很多方法,下面介紹兩個常用的方法:
join(參數):將數組中的元秦按照指定的分隔符拼接為字元串
push():向數組的末尾添加一個或更多元素,並返回新的長度。
③對象的屬性
·length屬性代表數組的長度
④對象的特點
在JavaScript中,數組元素的類型是可變的。
在JavaScript中,數組的長度是可變的。
3、Date對象
①對象的創建
vardata=newDate();
②對象的方法
Array對象有很多方法,下面介紹兩個常用的方法:
toLocalestring():返回當前date對象對應的時間本地字元串格式
getTime():獲取毫秒值。返回當前日期對象描述的時間到1970年1月1日零點的毫秒值差
4、Math對象
①對象的創建
Math數學對象不用創建,可以直接使用,使用方式如下:
Math.方法名();
②對象的方法
Array對象有很多方法,下面介紹四個常用的方法:
random():返回0~1之間的隨機數。含0不含1。
ceil(x):對數進行上取整。
floor(x):對數進行下取整。
round(x):對數進行四捨五入。
5、RegExp對象
在學習RegExp正則對象之前,我們首先來復習一下什麼是正則表達式?正則表達式就是定義字元串的組成規則。
單個字元用[]表示。如:
[a]表示字元a
[a-z]表示a-z中的任一字元
還有一些特殊符號代表特殊含義的單個字元。例如:
d表示單個數字字元=[0-9]
w表示單個單詞字元=[a-zA-Z0-9_]
量詞符號用?、*、+、{m,n}表示。其中
·?:表示出現0次或1次
·*:表示出現0次或多次
·+:出現1次或多次
·{m,n}:表示m<=數量<=n次
§m如果預設,即{,n}:最多n次
§n如果預設,即{m,}:最少m次
①對象的創建
RegExp正則對象的創建有兩種方法,我們一般採用第二種。
varreg=newRegExp("正則表達式");varreg=/正則表達式/;
②對象的方法
RegExp對象的常用方法只有一種:
test(參數):驗證指定的字元串是否符合正則定義的規范
6、Global對象
①對象的創建
顧名思義,Global對象就是全局對象,這個Global中封裝的方法不需要對象就可以直接調用。格式如下:
方法名();
②對象的方法
全局對象的方法有很多,下面簡單介紹幾種:
encodeURI():url編碼
decodeURI():url解碼
parseInt():將字元串轉為數字。逐一判斷每一個字元是否是數字,直到不是數字為止,將前邊數字部分轉為number
isNaN():判斷一個值是否是NaN。NaN六親不認,連自己都不認。NaN參與的==比較全部為false。
eval():將JavaScript轉化為字元串,並把它作為腳本代碼來執行。
以上就是小編今天為大家分享的關於Web前端開發知識點之JavaScript對象的文章,希望本篇文章能夠對正在從事web前端學習和工作的小夥伴們有所幫助,想要了解更多web前端知識記得關注北大青鳥web培訓官網,最後祝願小夥伴們工作順利,成為一名優秀的web前端工程師。
文章來源:原創凱哥的故事
㈢ 計算機網路——應用層-Web&HTTP
計算機網路系列博文——目錄
20世紀90年代初
網際網路應用
Web應用的組成
由對象組成。對象是一個文件,如HTML文件,JPEG圖像,Java程序,視頻片段等。
對象可通過一個URL地址定址。
Web頁面常由一個HTML基本文件和多個引用對象構成。
URL(Uniform Resoure Locator):統一資源定位器 RFC1738
用以定址Web對象
由一個存放對象的伺服器主機名和對象路徑名構成。
HTTP 由客戶端程序和服務端程序實現,二者通過交換HTTP報文會話。
HTTP規范定義了HTTP客戶端和服務端之間的通信協議。
Web瀏覽器實現HTTP客戶端,請求、接收、展示Web對象
Web伺服器實現HTTP服務端,響應客戶的請求,發送對象
HTTP使用TCP作為支撐運輸層協議。
埠:80
無狀態協議 伺服器不保存關於客戶的任何信息
伺服器向客戶發送被請求的文件,而不存儲任何關於客戶的狀態信息。
往返時間(Round-Trip Time,RTT)
一個短分組從客戶到伺服器然後再返回客戶所花費的時間。
某客戶和伺服器的一次會話中,每個請求/響應對通過一個單獨的TCP連接傳輸
HTTP 1.0版本使用非持續性連接
對多個待獲得的web對象,客戶端一次只請求一個對象,待前一個對象接收完畢後再發送對下一個對象的請求。
時間分析
瀏覽器通常支持並行的TCP連接。並行TCP連接數通常為5~10個。
對多個待獲得的web對象,客戶端一次可同時建立多個TCP連接,以同時請求多個web對象。
時間分析
某客戶和伺服器的一次會話中,所有請求/響應對經同一TCP連接傳輸
HTTP 1.1版本在默認方式下採用持續連接,但也可由客戶端/伺服器配置為非持續連接。
客戶端只有收到前一個響應後才發送新的請求
可理解為同個TCP內的串列
時間分析
客戶端只要遇到一個引用對象就盡快發出請求
可理解為同個TCP內的並行
HTTP 1.1的默認選項
時間分析
TCP 三次握手
1.客戶向伺服器發送一個小TCP報文段;
2.伺服器用一個小TCP報文段做出確認和響應;
3.客戶向伺服器返回確認和一個HTTP請求報文;
4.伺服器返回相應HTML文件;
HTTP規范
RFC 1945 , RFC 2616
用ASCII文本書寫
HTTP協議有兩類消息,請求消息(request)和響應消息(response)
請求行 HTTP請求報文的第一行
方法
首部行 請求行後繼的其它行,包含一些會話信息
空行 回車換行,分隔首部行和實體體
實體體(entity body)
GET方法下實體體為空
POST方法下實體體包含表單信息
狀態行
常見狀態碼
首部行
空行
實體體
包含了所請求的對象
HTTP是無狀態協議,但cookie技術允許伺服器識別用戶
cookie在無狀態的HTTP之上建立一個用戶會話層
參見 [RFC 6265]
cookie組件
cookie技術的爭議在於它可能泄露用戶的隱私
代表原Web伺服器來響應HTTP請求的網路實體
Web緩沖器通常由ISP購買並安裝
允許緩存器證實其緩存的副本是新的。
如果緩存器有web對象最新的版本,則初始伺服器不需要向緩存器發送該web對象
在HTTP請求消息中聲明所持有版本的日期
If-modified-since: <date>
如果緩存的版本是最新的,則響應消息中不包含對象
HTTP/1.0 304 Not Modified
內容分發網路(Content Distribution Network,CDN)
基於緩存器技術,CDN公司在網際網路上安裝許多地理上分散的緩存器,使得大流量本地化。
有共享CDN(Akamai,Limelight),專用CDN(谷歌,微軟)
㈣ 如何在web.config中存儲自定義對象
使用
NSUserDefaults
存儲自定義對象的最初,我們必須認識NSUserDefaults可以存儲哪一些類型的數據,下面一一列出:
NSUserDefaults支持的數據類型有:NSNumber(NSInteger、float、double),NSString,NSDate,NSArray,NSDictionary,BOOL
㈤ android調用webservice怎麼傳遞對象
1.webservice方法要傳遞參數的對象中包含了日期類型,guid類型。如下所示:
[html] view plain
POST /MyWebService.asmx HTTP/1.1
Host: 192.168.11.62
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://tempuri.org/AddMaintenanceInfo"
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<AddMaintenanceInfo xmlns="http://tempuri.org/">
<model>
<Id>guid</Id>
<CarId>guid</CarId>
<Cost>string</Cost>
<Dates>dateTime</Dates>
</model>
</AddMaintenanceInfo>
</soap:Body>
</soap:Envelope>
2.新建一個類CarMaintenanceInfo用於傳遞參數對象,並使其實現KvmSerializable,如下
[java] view plain
public class CarMaintenanceInfo implements KvmSerializable {
/**
* 車輛ID
*/
public String CarId;
/**
* 車輛維修費用
*/
public String Cost;
public String Dates;
@Override
public Object getProperty(int arg0) {
switch (arg0) {
case 0:
return CarId;
case 1:
return Cost;
case 2:
return Dates;
default:
break;
}
return null;
}
@Override
public int getPropertyCount() {
return 3;
}
@Override
public void getPropertyInfo(int arg0, Hashtable arg1, PropertyInfo arg2) {
switch (arg0) {
case 0:
arg2.type = PropertyInfo.STRING_CLASS;
arg2.name = "CarId";
break;
case 1:
arg2.type = PropertyInfo.STRING_CLASS;
arg2.name = "Cost";
break;
case 2:
arg2.type = PropertyInfo.STRING_CLASS;
arg2.name = "Dates";
break;
default:
break;
}
}
@Override
public void setProperty(int arg0, Object arg1) {
switch (arg0) {
case 0:
CarId = arg1.toString();
break;
case 1:
Cost = arg1.toString();
break;
case 2:
Dates = arg1.toString();
break;
default:
break;
}
}
}
注意:getPropertyCount的值一定要與該類對象的屬性數相同,否則在傳遞到伺服器時,伺服器收不到部分對象的屬性。
3.編寫請求方法,如下:
[java] view plain
public boolean addMaintenanceInfo(Context context) throws IOException, XmlPullParserException {
String nameSpace = "http://tempuri.org/";
String methodName = "AddMaintenanceInfo";
String soapAction = "http://tempuri.org/AddMaintenanceInfo";
String url = "http://192.168.11.62:6900/MyWebService.asmx?wsdl";// 後面加不加那個?wsdl參數影響都不大
CarMaintenanceInfo info = new CarMaintenanceInfo();
info.setProperty(0, "9fee02c9-8785-4b49-b389-58ed6562c66d");
info.setProperty(1, "12778787");
info.setProperty(2, "2013-07-29T16:45:20");
// 建立webservice連接對象
org.ksoap2.transport.HttpTransportSE transport = new HttpTransportSE(url);
transport.debug = true;// 是否是調試模式
// 設置連接參數
SoapObject soapObject = new SoapObject(nameSpace, methodName);
PropertyInfo objekt = new PropertyInfo();
objekt.setName("model");
objekt.setValue(info);
objekt.setType(info.getClass());
soapObject.addProperty(objekt);
// 設置返回參數
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);// soap協議版本必須用SoapEnvelope.VER11(Soap
// V1.1)
envelope.dotNet = true;// 注意:這個屬性是對dotnetwebservice協議的支持,如果dotnet的webservice
// 不指定rpc方式則用true否則要用false
envelope.bodyOut = transport;
envelope.setOutputSoapObject(soapObject);// 設置請求參數
// new MarshalDate().register(envelope);
envelope.addMapping(nameSpace, "CarMaintenanceInfo", info.getClass());// 傳對象時必須,參數namespace是webservice中指定的,
// claszz是自定義類的類型
try {
transport.call(soapAction, envelope);
// SoapObject sb = (SoapObject)envelope.bodyIn;//伺服器返回的對象存在envelope的bodyIn中
Object obj = envelope.getResponse();// 直接將返回值強制轉換為已知對象
Log.d("WebService", "返回結果:" + obj.toString());
}
catch (IOException e) {
e.printStackTrace();
}
catch (XmlPullParserException e) {
e.printStackTrace();
}
catch (Exception ex) {
ex.printStackTrace();
}
return true;
// 解析返回的結果
// return Boolean.parseBoolean(new AnalyzeUtil().analyze(response));
}
注意:傳遞date類型的時候其實可以使用Date而不是String。但是需要修改幾個地方
1.CarMaintenanceInfo類中的getPropertyInfo(),將arg2.type = PropertyInfo.STRING_CLASS修改為MarshalDate.DATE_CLASS;
2. 在請求方法中的 envelope.setOutputSoapObject(soapObject);下加上 new MarshalDate().register(envelope);
雖然可以使用Date,但是傳到伺服器上的時間與本地時間有時差問題。
當Android 調用webservice,請求參數中有日期,guid,double時,將這些類型在添加對象前轉換為字元串即可。
[java] view plain
// 構造request
SoapObject request = new SoapObject(PublishInfo.NAMESPACE, "GetCarListByRegion");
request.addProperty("leftTopLat", String.valueOf(leftTopLat));
request.addProperty("leftTopLng", String.valueOf(leftTopLng));
request.addProperty("rightBottomLat", String.valueOf(rightBottomLat));
request.addProperty("rightBottomLng", String.valueOf(rightBottomLng));
當需要傳遞一個伺服器對象參數時.
[html] view plain
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetLicenseDetails xmlns="http://tempuri.org/">
<companyId>guid</companyId>
<licenseNos>
<string>string</string>
<string>string</string>
</licenseNos>
<pageOptions>
<page>int</page>
<rows>int</rows>
<total>int</total>
<sort>string</sort>
<order>string</order>
<skip>int</skip>
<Remark>string</Remark>
</pageOptions>
</GetLicenseDetails>
</soap:Body>
</soap:Envelope>
[java] view plain
public ListPageResult<LicenseInfo> getLicenseDetails(String[] licenseNos, int page, int rows, int total) {
// 構造request
SoapObject request = new SoapObject(PublishInfo.NAMESPACE, "GetLicenseDetails");
// 許可證列表
SoapObject deviceObject = new SoapObject(PublishInfo.NAMESPACE, "GetLicenseDetails");
if (licenseNos != null && licenseNos.length > 0) {
for (int i = 0; i < licenseNos.length; i++) {
if (!"".equals(licenseNos[i])) {
deviceObject.addProperty("string", licenseNos[i]);
}
}
request.addProperty("licenseNos", deviceObject);
}
else {
request.addProperty("licenseNos", null);
}
// 分頁數據
SoapObject optionObject = new SoapObject(PublishInfo.NAMESPACE, "PageOptions");
optionObject.addProperty("page", page);
optionObject.addProperty("rows", rows);
optionObject.addProperty("total", total);
optionObject.addProperty("sort", null);
optionObject.addProperty("order", "desc");
optionObject.addProperty("skip", 0);
optionObject.addProperty("Remark", null);
request.addProperty("pageOptions", optionObject);
// 獲取response
Object response = sendRequest(context, request);
if (!mNetErrorHanlder.hasError(response)) { return ObjectAnalyze.getLicenseDetails(response); }
return null;
}
㈥ web service返回值是自定義對象時如何處理
需要在WSDL中描述這個類,也就是說要讓客戶端也獲得這個類才行
㈦ App 和 Web 的通用介面該怎麼設計
1、在介面定義中確定MVC的GET或者POST方式
由於我們整個Web API平台是基於MVC的基礎上進行的API開發,因此整個Web API的介面,在定義的時候,一般需要顯示來聲明介面是[HttpGet]或者[HttpPost],雖然有些介面也可以不用聲明,但是避免出現類似下面的錯誤信息,顯式聲明還是有好處的。
請求的資源不支持 http 方法「POST
例如在基類定義的查找對象介面如下所示。
/// <summary>
/// 查詢資料庫,檢查是否存在指定ID的對象
/// </summary>
/// <param name="id">對象的ID值</param>
/// <returns>存在則返回指定的對象,否則返回Null</returns>
[HttpGet]
public virtual T FindByID(string id, string token)
如果是增刪改的介面,一般需要聲明為POST方式提交數據,而且基於安全性的考慮,需要攜帶更多的參數。
/// <summary>
/// 插入指定對象到資料庫中
/// </summary>
/// <param name="info">指定的對象</param>
/// <returns>執行操作是否成功。</returns>
[HttpPost]
public virtual CommonResult Insert(T info, string token, string signature, string timestamp, string nonce, string appid)
2、動態對象的介面定義
在一般的Web API介面裡面,我們可能都會碰到很多簡單類型的參數,但是又想讓它們以POST方式提交數據,那麼我們就可以有兩種方法來處理,一種是定義一個類來放置這些參數,一種是採用動態的JObject參數,前者有很多不方便的地方,因為我們不可能為每個介面參數定義多一個實體類,這樣可能會有很多難以管理的類定義。如下面是微信API的調用介面案例,我們也需要設置這樣的處理規則。
介面調用請求說明
http請求方式: POST(請使用https協議)
https://api.weixin.qq.com/cgi-bin/groups/update?access_token=ACCESS_TOKEN
POST數據格式:json
POST數據例子:{"group":{"id":108,"name":"test2_modify2"}}
那麼我們採用JObject是這么樣的呢,我們來看介面的定義和處理代碼。JObject是Newtonsoft.Json.Linq命名空間下的一個對象。
/// <summary>
/// 修改用戶密碼
/// </summary>
/// <param name="param">包含userName和userPassword的復合對象</param>
/// <param name="token">用戶訪問令牌</param>
/// <returns></returns>
[HttpPost]
public CommonResult ModifyPassword(JObject param, string token)
{
//令牌檢查,不通過則拋出異常
CheckResult checkResult = CheckToken(token);
dynamic obj = param;
if (obj != null)
{
string userName = obj.userName;
string userPassword = obj.userPassword;
bool success = BLLFactory<User>.Instance.ModifyPassword(userName, userPassword);
return new CommonResult(success);
}
else
{
throw new MyApiException("傳遞參數出現錯誤");
}
}
其中我們把JObject對象轉換為我們所需要的對象的時候,因為我們沒有定義具體的實體類,因此採用了dynamic語法,聲明這是一個動態對象,由運行時獲取對應的屬性。
dynamic obj = param;
這樣我們就可以在調用的時候,動態POST對應的JSON對象給Web API介面,而不需要預先定義各種介面參數的類了。
/// <summary>
/// 調用Web API介面,修改用戶密碼
/// </summary>
/// <param name="userName">用戶名稱</param>
/// <param name="userPassword">修改的密碼</param>
/// <returns>如果修改成功返回true,否則返回false</returns>
public bool ModifyPassword(string userName, string userPassword)
{
var action = "ModifyPassword";
var postData = new
{
userName = userName,
userPassword = userPassword
}.ToJson();
string url = GetTokenUrl(action);
CommonResult result = JsonHelper<CommonResult>.ConvertJson(url, postData);
return (result != null) ? result.Success : false;
}
其中GetTokenUrl是根據token和API的地址等參數,構建一個完整的提交地址。我們在上面代碼通過
var postData = new
{
userName = userName,
userPassword = userPassword
}.ToJson();
就可以動態創建一個對象,並生成它的JSON字元串,把數據POST提交到對應的API介面裡面即可,然後對結果進行對象的轉換就算完成了。
3、集合和分頁的處理
在很多介面裡面,我們都需要用到分頁的處理,Web API也不例外,這樣可以提交數據檢索效率,減少伺服器數據處理的壓力,同時也提交客戶端的數據顯示速度。
一般的集合介面定義如下所示(通用性基類介面)。
/// <summary>
/// 返回資料庫所有的對象集合
/// </summary>
/// <returns>指定對象的集合</returns>
[HttpGet]
public virtual List<T> GetAll(string token)
{
//檢查用戶是否有許可權,否則拋出MyDenyAccessException異常
base.CheckAuthorized(AuthorizeKey.ListKey, token);
List<T> list = baseBLL.GetAll();
return list;
}
但是這樣的返回記錄會比較多,一般情況下需要分頁,那麼分頁的處理介面定義如下所示。
/// <summary>
/// 根據條件查詢資料庫,並返回對象集合(用於分頁數據顯示)
/// </summary>
/// <returns>指定對象的集合</returns>
[HttpPost]
public virtual PagedList<T> FindWithPager(string condition, PagerInfo pagerInfo, string token)
分頁介面,在這里返回的結果裡面,用了一個PageList的泛型類,這個方便我們獲取當前的記錄及總數,它的定義如下所示。
/// <summary>
/// 分頁集合
/// </summary>
/// <typeparam name="T">對象</typeparam>
public class PagedList<T>
{
/// <summary>
/// 返回記錄的總數
/// </summary>
public int total_count { get; set; }
/// <summary>
/// 列表集合
/// </summary>
public List<T> list { get; set; }
}
最後整個分頁的處理Web API介面實現如下所示。
/// <summary>
/// 根據條件查詢資料庫,並返回對象集合(用於分頁數據顯示)
/// </summary>
/// <returns>指定對象的集合</returns>
[HttpPost]
public virtual PagedList<T> FindWithPager(string condition, PagerInfo pagerInfo, string token)
{
//檢查用戶是否有許可權,否則拋出MyDenyAccessException異常
base.CheckAuthorized(AuthorizeKey.ListKey, token);
List<T> list = baseBLL.FindWithPager(condition, pagerInfo);
//構造成Json的格式傳遞
var result = new PagedList<T>() { total_count = pagerInfo.RecordCount, list = list };
return result;
}
最後客戶端調用分頁的Web API代碼如下所示。
/// <summary>
/// 根據條件查詢資料庫,並返回對象集合(用於分頁數據顯示)
/// </summary>
/// <param name="condition">查詢的條件</param>
/// <param name="pagerInfo">分頁實體</param>
/// <returns>指定對象的集合</returns>
public virtual List<T> FindWithPager(string condition, ref PagerInfo pagerInfo)
{
var action = "FindWithPager";
string url = GetTokenUrl(action) + string.Format("&condition={0}", condition);
var postData = pagerInfo.ToJson();
List<T> result = new List<T>();
PagedList<T> list = JsonHelper<PagedList<T>>.ConvertJson(url, postData);
if (list != null)
{
pagerInfo.RecordCount = list.total_count;//修改總記錄數
result = list.list;
}
return result;
}
4、混合框架界面整合Web API介面
在整個Web API的平台構建以及在混合框架的整合過程中,我把各個模塊還是遵循相對獨立的方式進行開發和整合,它們實現了從直接訪問資料庫、以WCF服務獲取數據,以及通過WebAPI調用方式獲取數據幾種方式的統一,從而實現了整個混合框架的高度整合。
整個混合框架的核心是以相對獨立的方式,整合各個可重用的模塊,我們可以遵循一定的基礎上,快速構建統一的應用平台。
搭建完畢的整個WebAPI平台,其中包括了服務端內容,以API控制器的方式,發布了對應的Web API介面。
在每個混合框架的獨立模塊裡面,我們封裝了對應的Web API客戶端調用處理,從而實現了Web API的調用方式。
在Win10下,使用Web API模式運行混合框架,獲得的主體界面效果如下所示。
獨立模塊許可權管理系統界面如下所示。
系列文章如下所示:
Web API應用架構在Winform混合框架中的應用(1)
Web API應用架構在Winform混合框架中的應用(2)--自定義異常結果的處理
Web API介面設計經驗總結
Web API應用架構在Winform混合框架中的應用(3)--Winfrom界面調用WebAPI的過程分解
Web API應用架構在Winform混合框架中的應用(4)--利用代碼生成工具快速開發整套應用
Web API應用架構在Winform混合框架中的應用(5)--系統級別字典和公司級別字典並存的處理方式
㈧ vb 中使用WebBrowser控制項獲取網頁對象,如何通過對象索引號獲取,以及得到對象索引號包括全局索引號
如果你只想獲取並點擊「更多」這個鏈接,用下面代碼就可以
Set links =WebBrowser.Document.getElementsByTagName("a")
For i = 0 To links.length-1
If links(i).innerText = "更多" Then links(i).Click '索引號就是i
Next