搜索
123
返回列表 发新帖
楼主: Jacen.He

使用webkit开发桌面软件

    [复制链接]

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13974
 楼主| 发表于 2017-12-26 02:16:36 | 显示全部楼层

inet.http 与 web.kit 共享会话

大家知道inet.http与 web.form浏览器控件是可以自动共享会话的,这非常的方便,而webkit并不能与inet.http共享会话,但是没有关系,今天我已经升级了web.kit 扩展库以及标准库中的inet.http,使两者之间可以实现共享会话。

下面是演示代码,运行以下代码打开论坛以后,请输入用户名、密码登录论坛,然后点击“后台抓网页”按钮在 aardio中调用 inet.http 抓取网页,注意这时候抓取到的页面显示的是登录后的页面,可以看到 inet.http 与 web.kit 成功共享会话。
import win.ui;
/*DSG{{*/
var winform = win.form(text="web.kit/inet.http 共享会话 - 登录后再试";right=1206;bottom=795)
winform.add(
btnHttpGet={cls=
"button";text="后台抓取网页";left=1079;top=16;right=1183;bottom=60;dr=1;dt=1;z=1};
btnOpen={cls=
"button";text="打开网页";left=961;top=15;right=1062;bottom=57;dr=1;dt=1;z=5};
custom={cls=
"custom";text="custom";left=36;top=88;right=1173;bottom=766;db=1;dl=1;dr=1;dt=1;z=3};
edit={cls=
"edit";left=28;top=76;right=1190;bottom=765;db=1;dl=1;dr=1;dt=1;edge=1;hide=1;multiline=1;z=4};
editUrl={cls=
"edit";text="http://bbs.aardio.com";left=28;top=21;right=956;bottom=50;dl=1;dr=1;dt=1;edge=1;multiline=1;z=2}
)
/*}}*/

import web.kit.form;
var wb = web.kit.form( winform.custom );
winform.show();

//打开网页
wb.go("http://bbs.aardio.com/")

//自动点击登录页面
wb.waitQueryEles("a",{innerText="登录";href="login"} ).click();

import string.html;
import inet.http;
winform.btnHttpGet.oncommand =
function(id,event){
   
   
//首先取浏览器的userAgent,假装是浏览器
    var http = inet.http(wb.script.navigator.userAgent);
     
   
//禁用默认的cookie管理
    http.disableCache();
    http.disableCookies();
   
   
//把浏览器的cookie加上去
    http.addHeaders ={cookie = wb.cookie}
   
   
var str = http.get(wb.location);
   
if( str ){
        
if(!string.isUtf8(str))
            str = string.fromto(str,0,65001);   
            
        winform.edit.text = string.html.toText(str);
    }
   
else {
        winform.edit.text =
"";
    }
   
    winform.custom.hide =
true;
    winform.edit.hide =
false;
}

winform.btnOpen.oncommand =
function(id,event){
    wb.go( winform.editUrl.text );
    winform.custom.hide =
false;
    winform.edit.hide =
true;
}

wb.onURLChanged =
function(url){
    winform.editUrl.text = url;
}

//启动消息循环
win.loopMessage();

回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13974
 楼主| 发表于 2017-12-26 02:17:29 | 显示全部楼层

web.kit新版提供的cookie管理函数

import win.ui;
/*DSG{{*/
var winform = win.form(text="webkit 获取所有网站cookie")
/*}}*/

import web.kit.form;
var wb = web.kit.form( winform );

wb.go(
"http://www.baidu.com")
winform.show();   

win.delay(1000);

//写网站cookie
wb.cookieSet(   
    name =
"test";
    value =
"abc";
    domain =
".baidu.com";
    path =
"/";
    expires = time().addday(30)
)

//输出所有网站cookie
winform.msgbox( wb.cookieData().stringify() )

//转换为HTTP请求头格式
var cookies  = wb.cookieData().getCookies("baidu.com")

//首先取浏览器的userAgent,假装是浏览器
import inet.http;
var http = inet.http(wb.script.navigator.userAgent);

//禁用默认的cookie管理
http.disableCache();
http.disableCookies();

//把浏览器的cookie加上去
http.addHeaders ={cookie = cookies }

//跟浏览器共话
var str = http.get(wb.location);

win.loopMessage();
webkit的cookie格式支持标准库中的,可以使用 fsys.cookies加载,转换,存储,详细的请看库函数文档。

回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13974
 楼主| 发表于 2017-12-29 02:10:36 | 显示全部楼层

web.kit 上传文件

web.kit可以直接支持上传文件:
import win.ui;
/*DSG{{*/
var winform = win.form(text="WebKit上传文件")
winform.add()
/*}}*/

import web.kit.form;
var wb = web.kit.form( winform  );

wb.html =
/**
<body>
    <form action="http://eu.httpbin.org/post" method="post" enctype="multipart/form-data">
        选择文件:<input type="file" name="file1" /><br />
        <input type="submit" value="上传" />
    </form>
</body>
**/


winform.show();
win.loopMessage();

回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13974
 楼主| 发表于 2017-12-29 02:11:26 | 显示全部楼层

web.kit 使用js调用aardio上传文件

import win.ui;
/*DSG{{*/
var winform = win.form(text="webkit上传文件示例")
/*}}*/

import web.kit.form;  
var wb = web.kit.form(winform);  

import inet.http;
import web.multipartFormData;
import fsys.dlg;
wb.external = {

    upload =
function(userAgent,proc){
        
var postSize,contentLength = 0;
        
var filePath  = fsys.dlg.open(,"选择要上传的文件");
        
if(!filePath) return;
        
        
var form = web.multipartFormData();
        form.add(
"username","用户名");
        form.add(
"password","密码");
        form.addFile(
"filename",filePath);
        
        
//使用webkit的userAgent,假装是webkit客户端
        var http = inet.http(userAgent);
        http.disableCookies();
//禁用默认的cookie
        http.disableCache(); //强制刷新
        http.addHeaders ={
            cookie = wb.cookie;
//添加浏览器的cookie
        }
        
        http.onSendBegin =
function(){
            contentLength = form.size();
            
return contentLength;
        }
        http.onSend =
function(remainSize){
            
var str = form.read(0x2000);
            
if(!#str)return;
            postSize = postSize + #str;
            proc( contentLength,postSize,remainSize-#str );
            win.delay(10)
            
return str;
        }
        
var json = http.post("http://eu.httpbin.org/post",,{ ["Content-Type"] = form.contentType() }  );

        wb.document.write(
"<pre>"+json+"</pre>")
    };
}
wb.html =
/**
<!doctype html>
<html>
<head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8">
</head>
<body>
    <a href='javascript:external.upload(navigator.userAgent,
        function(contentLength,postSize,remainSize){
            document.write( "<br>总大小:" + contentLength +" 已上传:" + postSize + " 剩余:" + remainSize);
        });'>上传</a>
</body>
</html>
**/


winform.show()
win.loopMessage();
   
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2018-12-13 15:24 , Processed in 0.062500 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表