中华恐龙城 http://qdesk.cnkly.com
rss新闻、笑话阅读,评论,转播,分享工具
从http://www.ajax-js.com/ext/examples/feed-viewer/view.html找到基本界面,先提交到微博平台,调研了解是否有界面语言什么限制的.
源文档 <http://www.blogjava.net/xiangjava/archive/2010/08/14/328858.html>
2012\
01\
16 sina微博冻结申请15天
15 编码:9:00-23:00
1.将类别及取条改为后台php从mysql查询模式
13 编码:21:00-23:30
1.添加新浪登陆按钮及事件,准备以后添加后台交互.
2.类别按钮改为关闭时隐藏,需要时再显示即可.
12 编码:20:00-22:30
收到新浪说没有回入登陆功能等不通过认证
这是我的计划:
这是我的新浪平台: http://pkrss.sinaapp.com
1.准备做登陆后提交到新浪微博应用中,
2.再集成rss更多的类别 及 源,(已测试未使用)
3.再加入语音朗读
11 提交新浪应用审核
修改本地add feed的校验方式为服务器转rss进行校验
注册baidu应用及腾讯应用,百度应用需要下载布署监控文件,主页需添加监控脚本代码,支持绑定可选百付宝免费捐赠及收费 监控脚本注意两个都要和服务器完全一样.
腾讯应用实在太烂了,ie9 ff许多链接和css有问题
10 在左边rss源上加上分类按钮,点击弹出分类tab控件.从服务器取出所有的rss分类,但只在测试页面中,未发布到mysql.
08 10:30 发布新闻平台
10:50 发现php file_get_contents 失效
改用curl, 出现:"cURL Error: couldn't connect to host"
准备用ext本地获取xml
案
2012年4月5日
9:17
成都西维数码科技有限公司
360
2012年3月23日
10:20
RSS新闻阅读器+Windows语音TTS播放+Google Speech语音TTS播放+桌面透明歌词效果+直接文本朗读带记忆功能。
Windows 平台下PC桌面应用软件,
如果系统语音不喜欢,可以网上搜索中文语音库自己安装,如果不会配置,请到控制面板中找语音,切换默认语音引擎。支持多国语言。
使用QT开发,MAC 与 UBuntu版本,请到pkrss.sf.net下去找,等有时间再发布MAC及UBuntu平台版本。
更新日志:
4.1.3->4.1.4 修改gb2312在windows的编码问题。临时性解决。
源文档 <http://user.newhua.com/fckeditor/editor/fckeditor.html?InstanceName=body&Toolbar=Basic>
Google
2012年3月21日
21:35
1.注册google adsense
Adsense:
"要更新并重新提交申请,请访问
https://www.google.com/adsense?hl=zh_CN,并
使用您在申请时提交的电子邮件地址和密码登录。" 只要用"https://www.google.com/adsense?hl=zh_CN"网址打开重新填写资料就行了。
源文档 <http://shouxin-liu.blog.sohu.com/104339774.html>
<!-- 将此标记放在您希望呈现 +1 按钮的位置 -->
<g:plusone size="small" annotation="inline"></g:plusone>
<!-- 将此呈现调用放在适当的位置 -->
<script type="text/javascript">
window.___gcfg = {lang: 'en-GB'};
(function() {
var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
po.src = 'https://apis.google.com/js/plusone.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
})();
</script>
2.等待adsense审核注册成功
3. 插入adsense代码
Google adsense 代码 pksoftlab.com:
<script type="text/javascript"><!--
google_ad_client = "ca-pub-7342074305269451";
/* pksoftlab */
google_ad_slot = "3136838122";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
4.等待adsense再次审核
虚拟主机
2012年3月21日
20:11
域名 pksoftlab.com 购买于http://www.cndns.com
Yahoo
2012年3月12日
20:04
本地地址:D:\work\svn\pkrss_sina\2\client3\third\yahoo\yap
配置提交地址:
http://pkrss.sinaapp.com/client3/third/yahoo/yap/ygadget_6aOHIC6k.xml
Paypal
2012年2月19日
22:08
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_s-xclick">
<input type="hidden" name="hosted_button_id" value="3FXUFNMCRKJKG">
<table>
<tr><td><input type="hidden" name="on0" value="Service">Service</td></tr><tr><td><select name="os0">
<option value="level 1 vip (1 month)">level 1 vip (1 month) $1.00 USD</option>
<option value="level 2 vip(1 month)">level 2 vip(1 month) $2.00 USD</option>
<option value="level 3 vip(1 month)">level 3 vip(1 month) $3.00 USD</option>
</select> </td></tr>
</table>
<input type="hidden" name="currency_code" value="USD">
<input type="image" src="https://www.paypalobjects.com/en_US/C2/i/btn/btn_buynowCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
<img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
</form>
Firefox
2012年2月19日
21:29
2012-2-19
发布成功: https://addons.mozilla.org/zh-CN/firefox/addon/lian456/
可以自动帮你创建插件工具
Detail:
pkrss is one rss tools, it embed http://pkrss.sinaapp.com.
contact with google rss feed,join in multi lanauage support,if default panel has no feed,your can search some feed by keyword in topbar.
More detail:
i liked this tool,because my first client tool in http://pkrss.sf.net, but it has so many unused feature,so i will embed with pkrss_web in futher,i need money to emplore some programmer to develop with me.
Google web store
2012年2月19日
17:04
2012-2-19
Google app store 费用:$5
需要google 站长工具验证发布网站的站长身份
ratproxy - passive web application security assessment tool
源文档 <http://code.google.com/p/ratproxy/wiki/RatproxyDoc>
教程: http://code.google.com/chrome/extensions/getstarted.html
使用chrome浏览器才能注册谷歌电子钱包,而且先要使用google账号,否则跳转失败
飞信
2012年2月13日
22:00
基于飞信接口开发的短信转发软件-友信
友信是基于飞信通信接口开发的,能够获取飞信好友,可以发短信到飞信好友手机或者是飞信,可以收到好友的回复。还支持转发特定好友的飞信信息到其他飞信好友那里。这个功能可以用于会员服务,比如发布手机报,天气预报,促销等信息。
手机或者飞信号码的最后几位被我删除了,为了保护隐私
客户号码:就是那些你要转发信息的客户号码。
提供商号码:就是你要把从这个号码发来的信息来转发给客户
发送信息:测试单独发送信息
好友列表:飞信的好友
这个软件是使用了飞信SDK接口开发的,
关键部分的代码:
/// <summary>
/// 登陆飞信
/// </summary>
private bool FetionLogin(string userName,string pwd)
{
sdk.AccountManager.FillUserIdAndPassword(userName, pwd, false);//第三个参数为是否自动登陆
bool isOk=sdk.AccountManager.Login();//登陆
return isOk;
}
/// <summary>
/// 发送消息
/// </summary>
private bool SendFetionMsg(string userName, string msg)
{
bool isOk = false;
try
{
int state = sdk.ContactControl.SendIM.SendIM(userName, msg);
}
catch { isOk = false; }
return isOk;
}
/// <summary>
/// 发送手机消息
/// </summary>
private bool SendFetionMobileMsg(string userName, string msg)
{
bool isOk = false;
try
{
int state = sdk.ContactControl.SendSMS.SendSMS(userName, msg);
}
catch { isOk = false; }
return isOk;
}
/// <summary>
/// 加载好友列表
/// </summary>
/// <param name="psSdk">飞信sdk对象</param>
/// <returns>返回飞信好友信息集合</returns>
private List<FetionFriend> GetFetionFriendList(FetionSDK psSdk)
{
List<FetionFriend> fetionFriends = new List<FetionFriend>();
try
{
List<Imps.Client.Core.Contact> list = psSdk.ContactControl.getAllContactList();
for (int i = 0; i < list.Count; i++)
{
try
{
FetionFriend fetionFriend = new FetionFriend();//自定义飞信用户实体信息类
fetionFriend.UserId = int.Parse(list[i].Uri.Id);
fetionFriend.Nickname = list[i].DisplayName;
fetionFriend.Mobile = list[i].PersonalInfo.MobileNo;
fetionFriends.Add(fetionFriend);
}
catch { }
}
}
catch { fetionFriends = new List<FetionFriend>(); }
return fetionFriends;
}
/// <summary>
/// 飞信sdk出现错误
/// </summary>
private void Sdk_SDK_Error(object sender, NullStudio.Fetion_SDK.Event.SDK_ErrorEventArgs fe)
{
this.txtBox.Text += "信息:"+fe.Message.Message+"\r\n";
}
private string userName = "";
private string userPwd = "";
/// <summary>
/// 当前飞信号状态
/// </summary>
private void Sdk_SDK_UserSatusChange(object sender, Imps.Client.Core.UserSatusChangedEventArgs e)
{
switch (e.NewStatus.ToString())
{
case "Disconnected"://断开了网络
FetionLogin(userName, userPwd);//重新登陆
break;
case "Initialized"://已初始化
break;
case "Loginning"://登陆中
break;
case "Logon"://已登陆
sdk.AccountManager.CurrentUser.Presence.AsyncChangeMainPresence(Imps.Common.MainPresence.Online, Imps.Common.MainPresence.Online.ToString());//设置PC在线
break;
case "Logoff"://离开网络
break;
case "Logouting"://注销中
break;
case "None"://无状态
break;
case "OfflineLogon"://离线
break;
case "StandBy"://待机
break;
case "WaitReconnect"://等待
break;
}
this.txtBox.Text += "状态"+e.NewStatus.ToString() + "\r\n";
}
/// <summary>
/// 接收到的消息
/// </summary>
private void sdk_SDK_ReceiveMessage(object sender, NullStudio.Fetion_SDK.Event.SDK_ReceiveMessageEventArgs fe)
{
string Content = fe.Message.Substring(fe.Message.IndexOf("\r\n")+2);
string[] ContentS = Content.Split(new string[] { ":" }, StringSplitOptions.RemoveEmptyEntries);
int lc=Content.IndexOf(':');
string UserTo=ContentS[0].ToString();
string Msg=Content.Substring(lc+1);
if (Msg[0] == '@')//如果是转移字符串
{
string CChar = Msg.Substring(1);
int topi = 0;
if (int.TryParse(CChar, out topi))//如果为转意数字的话
{
string ListStr = textBox6.Text;
string[] ChangeChar = ListStr.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
foreach (string istr in ChangeChar)
{
string[] OneChar = istr.Split(new string[] { ":" }, StringSplitOptions.RemoveEmptyEntries);
string One = OneChar[0];
if (CChar == One)
{
Msg = OneChar[1];
}
}
}
}
PowerTalkService.FetionInterFace PTFIF = new PowerTalkClient.PowerTalkService.FetionInterFace();
PTFIF.ChatAdd(textBox3.Text, "游客"+UserTo,Msg);
this.txtBox.Text += "" + string.Format(fe.Message, fe.Contact.PersonalInfo.Nickname +"("+ fe.Contact.Uri.Sid.ToString()+")") + "\r\n";
}
private FetionSDK sdk = new FetionSDK();//实例化飞信sdk
private void Fetion_Load(object sender, EventArgs e)
{
sdk.SDK_ReceiveMessage += new FetionSDK.SDK_ReceiveMessageEventHandler(sdk_SDK_ReceiveMessage);//消息接收事件
sdk.SDK_UserSatusChange += new FetionSDK.SDK_UserSatusChangedEventHandler(Sdk_SDK_UserSatusChange);//用户状态事件
sdk.SDK_Error += new FetionSDK.SDK_ErrorEventHandler(Sdk_SDK_Error);//sdk错误事件
textBox6.Text = "1:您好!\r\n2:有什么可以帮助您的?\r\n3:是的,我们的产品是开源但不免费的。";
}
源文档 <http://apps.hi.baidu.com/share/detail/3495624>
Baidu
2012年2月10日
21:39
网点地图:
http://blog.pkrss.com/client3/third/sitemap.xml
应用ID224563
API KeyQaQDLfexnH9zao5EU6oe9iNK
Secret Key
源文档 <http://app.baidu.com/developer/appinfo?t=basic&id=224563>
百度连接:
应用ID224872
API KeyDzZZApl6GsQhLeSgbxY9ViuP
Secret Key
(Secret Key用来保证数据通信的安全,请妥善保管,不要对外透漏)
源文档 <http://dev.baidu.com/connect/appinfo?t=basic&id=224872>
2012-2-25 添加baidu seo
Facebook
2012年2月5日
22:27
应用地址:http://apps.facebook.com/pkrssweb/
管理地址:https://developers.facebook.com/apps/300106523381410/
可以免费托管:https://deep-night-1597.herokuapp.com/
2012-2-5 22:30 创建,全过程不到20分钟,是SINA,QQ,FACEBOOK中最快的一个。
Name: pkrssweb
Namespace:pkrssweb
App ID: 300106523381410
App Secret:
Object Debugger
Input URL or Access Token
Scrape Information
Response Code: | 200 |
Fetched URL: | |
Canonical URL: | |
Final URL: |
Open Graph Warnings That Should Be Fixed
Inferred Property: | The 'og:url' property should be explicitly provided, even if a value can be inferred from other tags. |
Inferred Property: | The 'og:title' property should be explicitly provided, even if a value can be inferred from other tags. |
Object Properties
og:url: | |
og:type: | website |
og:title: | |
og:updated_time: | 1330563637 |
Redirect Path
Final URL is in bold (this is the URL we tried to extract metadata from).
URL
Graph API: | |
Scraped URL: |
源文档 <http://developers.facebook.com/tools/debug/og/object?q=http%3A%2F%2Fpkrss.sinaapp.com>
qq
2012年2月6日
16:00
logo在这里:http://wiki.open.t.qq.com/index.php/%E8%A7%86%E8%A7%89%E7%B4%A0%E6%9D%90%E4%B8%8B%E8%BD%BD
潇潇(732869825) 15:19:45
潇潇(732869825) 15:19:49
潇潇(732869825) 15:20:04
要方都收听了对方才行的.
语音新闻
sina开放平台
2012年1月8日
10:33
2-12-3-7
简介
这是一款各大即时头条新闻朗读的在线阅读工具,可以灵活订阅与查找各大头条新闻关键词
1.支持RSS新闻分类,查找
2.支持各大SNS微博平台的分享,oauth一站式登陆
3.支持多国语言,切换主题,调整文字大小
4.即将支持语音在线朗读,cool
操作:
a:使用百度微博账号登陆
1.点击左上角的登陆按钮,打开登陆窗口
2.在登陆窗口右下角,点击百度图标,使用百度微博OAuth一站式登陆.
b:使用百度分享
1.点击中间的共享按钮
2.输入星级及共享的消息
3.钩选百度微博图标
4.发布
c.切换目录
1.点击中间的目录
2.在目录窗口中选择一个类别
3.左边源列表刷新后,选择一个源
4.右边会更新源内容
d.新闻查找
1.在上方文本框输入关键字,比如"笑话",按下确定.
2.下方内容将出现使用google后台查询的有关笑话的新闻.
e.切换目录
1.在左边,点击目录
2.出现目录窗口,选择一个,比如"笑话".
3.左边新闻源将被更新为"笑话"的源,切换源后,右边也显示具体的新闻源内容.这很酷,是吧.
f.切换语言
1.如果你不喜欢中文,可以从上方的"切换语言"中选择一个国家.
2.点击确定,这样就把你当成该国国民,给你看该国的新闻了.
3.说明:当前只支持拉模式,只有拉过的新闻,才会有记录,所以如果切换到某个冷门国家,别说没有新闻啊.
计划:
1.语音播新闻
为了开发RIA富网络应用,一些语音自动播新闻后台已测试好,等待前台对象完成语音自动播新闻.
2.自动调节字体大小
字体太小,看毛啊,css控制字体如此方便,资料已搜集,等等前台设计对接...
3.与客户端集成
只有web,不要前辈客户端软件了? 即时bs模式再好,cs模式也有其优点,桌面客户端的便捷是web端不能取代的.所以需要集成到客户端,桌面歌词与语音,新闻数据源的三大集成,要像我们的三网融合一样,为用户提供便利.
英语:
1.support oauth login
2.support catalog rss
3.support rss search
4.support font resize
5.support change ui theme
6.support multi-lanauage change
7...
应用名称:
pkrss_web
应用类型:
站内应用
App Key:
370571421
App Secret:
提交新闻微博: http://weibo.com/2032496683
补上代码 自适应宽高
<script src="http://tjs.sjs.sinajs.cn/t35/apps/opent/js/frames/client.js" language="JavaScript"></script>
源文档 <http://open.weibo.com/apps/370571421/info/basic>
sae成:功 http://pkrss.sinaapp.com
本地测试小工具:http://sae.sina.com.cn/?m=devcenter&catId=231
启动文档
2011年12月25日
21:19
指导老师: 林老师
学生: 连德亮
完成日期: 2010/12/14
二次开发: 2011/12/25
2010/12/14 22:00 完成一期初稿,并发送给指导老师。
2010/12/18 21:29 完成chart引入,自定义页面。
2010/12/26 12:07 完成rss的引入,chart的部分研究,并发送给指导老师。
2011-12-25 21:19 转二次开发及发布到http://pkrss.sourceforge.net/pkstock_yahoo/
- 概述
本论文通过YUI提供强大免费的,商业级别的API,来完成个人实用的股票Web浏览程序。在介绍如何使用YUI提供的API接口的同时,以反映作者个人偏号的设计,着重于实用,方便,简洁的目的。
在版面设计时,参考了YUI的示例样式,基本保持其默认的设计风格,借于其强列的视觉冲击。运用了JavaScript和CSS强大的静态网页设计功能,整个网站的页面看起来不多,全在一个页面中实现,保持简洁易用。但各小版窗口独立使用独立技术与数据,其全部可以Local浏览,使用时需保证连接上Internet.。
本论文附带的示例在联Internet网状态下,使用IE9测试quote+chart+rss 可用; 在firefox 3/4测试chart+rss可用,quote的datasource还存在问题。
二、结构图
先在放部使用一个Pane,内部嵌套各自的iframe网页,使用ajax异步打开网页。
图1. Yahoo API DataSource 结构图
三、站点主题选择
Yahoo,Google,Sina,Baidu等互联网各大公司均已在网络上提供方便可造的数据接口,站在互联网巨头高唱的云时代,我们身连享有许多免费且方便的资源。
所以,介于本人曾经使用Visual C++开发过Windows桌面版股票看盘客户端软件的影响,我这里关注使用那些云数据,和API,在结束本学期之际,设计了此金融信息方面的股票数据看般软件Web端的静态网页语言的实现。
站点的代码除使用互联网巨头提供的云数据与接口外,其余皆为个人设计完成,为了信息反映的快速简单性。以上便是我个人站点毕业设计的指导思想。
除了本文档中提供的说明外,其它的技术和版块,不再此作详细描述。
四、基础技术点介绍
1 申明数组:
var a = new array()
或 var a = ["a","b","c"];
使用数组:
var b = a[1];
2. 申明对象:
var a = {a:"ni",b:"hao",c:function(){}};
使用对象:
var b = a.a;
a.c();
3. css样式文件封装:
本网站使用统一封装,需各自独立的文件进行对应分类,达到主文件缩小,对应子文件变多的功能。
a. 在css/index.css样式文件中申明样式.:
定义主体样式, 比如P TABLE等等,直接加载:
body {
margin:0;
padding:0;
}
定义id 为toggle对象样式:
#toggle {
text-align: center;
padding: 1em;
}
定义.yui-layout-doc类型样式, 在HTML 里面用CLASS="" 调用:
.yui-layout-doc {
margin:0;
padding:0;
}
定义demo对象.yui-resize-handle-br类型样式:
#demo .yui-resize-handle-br {
height: 11px;
width: 11px;
background-position: -20px -60px;
background-color: transparent;
}
b. 在需要时:
<link rel="stylesheet" type="text/css" href="css/index.css" />
4. js文件封装:
5. url自动http补头:
var len = currenturl.length;
if(len<7 || currenturl.substring(0,7) != "http://"){
currenturl = "http://" + currenturl;
}
5. 动态创建网页元素:
演示创建一个按钮,设置其标签,添加点击事件,和追加到某个父元素之下:
var button = document.createElement('button');
button.innerHTML = 'remove tab';
YAHOO.util.Event.on(button, 'click', removeTab);
tabView.appendChild(button);
演示设置id:
button.id = "e";
6. 动态查找网页元素:
document.getElementById('center1');
7. 动态改变网页元素高宽:
divElem.style.width="100%";
divElem.style.height = "600px";
8. 动态改变网页元素的源码:
document.getElementById("wwwwe").innerHTML="<a href="/a.htm">test</a>";
9. 动态改变网页元素的文本:
document.getElementById("wwwwe").innerText
="test";
10. 创建下拉选项:
<select name="pizza-size" id="pizza-size">
<option selected label="none" value="none">Select a size</option>
<optgroup label="Thin Crust" id="thin-crust-sizes">
<option value="1.1">Small</option>
<option value="1.2">Medium</option>
<option value="1.3">Large</option>
<option value="1.4">Extra Large</option>
</optgroup>
<optgroup label="Deep Dish" id="deep-dish-sizes">
<option value="2.1">Regular</option>
<option value="2.2">Large</option>
</optgroup>
</select>
11. 如何删除自身:
var oPizzaSizeSelect = YAHOO.util.Dom.get("pizza-size");
oPizzaSizeSelect.parentNode.removeChild(oPizzaSizeSelect);
12. IFrame实现自适应大小:
利用事件,定时呼叫js函数,根据滚动条或文档窗口大小完成自适应。
以下是网上搜集的代码请在源码中查看,在此不作过多叙述。
13. YUI 2 和 YUI3的示例:
限于篇幅限制,详情请读者使用搜索引擎www.baidu.com或www.google.com来搜索关于Yahoo 的YDN 中的YUI2及YUI3子版本的Example及Doc说明。或可见引用中的说明。
14. Yahoo Stock API:
详见引用部分提供的地址进行查看。
15. Sina Stock API:
详见引用部分提供的地址进行查看。
16. 树形的实现:
利用yahoo api yui2 实现:通过引用层left1,里面创建树控件。
结构如下:
+ stock // 当点击stock主节点时,会打开或关闭子节点。
|_quote // 当点击时,右边的主面板实现打开报价窗口.
|_chart // 当点击时,右边的主面板实现打开图窗口。
具体代码,请查看源码。在此不作过多叙述。
17. 树子顶级other节点实现:
申明数据:
var other = [{root:"other1",
data:[ {label:"yahoo",uri:"http://www.yahoo.com.cn"},
{label:"sina",uri:"http://www.sina.com.cn"}
]}];
添加进树中:
for(var i=0;i<other.length;i++){
tmp0Node = new YAHOO.widget.TextNode(other[i].root, tree.getRoot(), false);
var tmp2 = other[i].data;
for(var j=0;i<tmp2.length;i++){
new YAHOO.widget.TextNode(tmp2[i].label, tmp0Node, false);
}
}
响应事件:
for(var i=0;i<other.length;i++){
var tmp2 = other[i].data;
for(var j=0;i<tmp2.length;i++){
if(tmp2[i].label == node.label){
currenturl = tmp2[i].uri;
add_pane_to_tabview(2);
found = true;
break;
}
}
}
18. 创建菜单栏:
原理:
- 申明数据。
- 动态根据申明的数据创建下拉菜单。参考该示例:
申明数据:
var aSubmenuData = [
{
id: "Server",
itemdata: [
{ text: "Argentina", url: "au." },
{ text: "Australia", url: "au." },
{ text: "Brazil", url: "br." },
{ text: "Canada", url: "ca." },
{ text: "France", url: "fr." },
{
text: "PIM",
submenu: {
id: "pim",
itemdata: [
{ text: "Yahoo! Mail", url: "http://mail.yahoo.com" },
{ text: "Yahoo! Address Book", url: "http://addressbook.yahoo.com" },
{ text: "Yahoo! Calendar", url: "http://calendar.yahoo.com" },
{ text: "Yahoo! Notepad", url: "http://notepad.yahoo.com" }
]
}
},
19. yahoo的历史数据查询:
http://ichart.yahoo.com/table.csv?s=XOM&a=1&b=1&c=2009&d=12&e=31&f=2010&g=d&ignore=.csv
下载:2009-02-02 到 2010-12-17(今天)的以下示例数据:
Date,Open,High,Low,Close,Volume,Adj Close
2010-12-17,72.11,72.39,71.78,72.17,36718100,72.17
2010-12-16,71.92,72.33,71.57,72.22,18513900,72.22
…..
- s 股票名称
- a 起始时间,月
- b 起始时间,日
- c 起始时间,年
- d 结束时间,月
- e 结束时间,日
- f 结束时间,年
- g 时间周期。Example: g=w, 表示周期是周。d->日(day), w->周(week),m->月(mouth),v->dividends only
一定注意月份参数,其值比真实数据-1。如需要9月数据,则写为08
20. 自动完成输入股票名
针对股票名的查询,通过查看文件:yahoo-finance-managed\YahooManaged.Finance\Finance\NonAPI\IDSearchDownload.vb 中的Private
Function DownloadURL(ByVal search As
String, ByVal server As
IDSearchServer) As
String 所示:
http://d.yimg.com/autoc.finance.yahoo.com/autoc?query={输入}+&callback=YAHOO.Finance.SymbolSuggest.ssCallback
21. json数据解析
1. 在开发过程中,遇到json数据格式解析的不理解。
1.1 使用yahoo测试查询接口:
1.2 返回:
{"ResultSet":
{"type":"web","totalResultsAvailable":2147483647,"totalResultsReturned":100,"firstResultPosition":1,"moreSearch":"\/WebSearchService\/V1\/webSearch?query=1&appid=jennyhan_ac&region=us",
"Result":[
{"Title":"1 - Wikipedia, 省略数据…
1.3 解析代码:
var oDS = new YAHOO.util.XHRDataSource("assets/php/ysearch_proxy.php");
oDS.responseType = YAHOO.util.XHRDataSource.TYPE_JSON;
oDS.responseSchema =
{
resultsList : "ResultSet.Result",
fields : ["Title"]
};
var oAC = new YAHOO.widget.AutoComplete("myInput", "myContainer", oDS);
oAC.queryDelay = .5;
oAC.generateRequest = function(sQuery)
{
return "?output=json&results=100&query=" + sQuery ;
}
2.所以在收到股票名查询的json时,应该如下解析:
2.1 使用查询股票名的地址:
2.2 返回:
YAHOO.Finance.SymbolSuggest.ssCallback(
{
"ResultSet":
{"Query":"6","Result":[
{"symbol"省略数据…
2.3 解析代码:
var oDS = new YAHOO.util.XHRDataSource("http://d.yimg.com/autoc.finance
.yahoo.com/autoc");
oDS.responseType = YAHOO.util.XHRDataSource.TYPE_JSON;
oDS.responseSchema =
{
resultsList : "ResultSet.Result",
fields : ["symbol","name","exch","type","exchDisp","typeDisp"]
};
oDS.maxCacheEntries = maxCacheEntries || 5;
var oAC = new YAHOO.widget.AutoComplete(inputCtl, dropLstCtl, oDS);
oAC.generateRequest = function(stk)
{
return "?query="+stk+"&callback=YAHOO.Finance.SymbolSuggest.
ssCallback";
};
2.4 需要增加解析json的操作:
oDS.doBeforeParseData=function(oRequest,oFullResponse,oCallback)
{
var rst = oFullResponse.replace(/[^\(]*\((.*)\)/g,"$1");
return YAHOO.lang.JSON.parse(rst || "");
}
五、模块介绍
1. 初始主页面
- 基本页面标题头。
- 主体工作区部分。
- 左树形
- 上标题
- 右主体
- 下脚注。
由于yahoo似乎控制了工作区组成部分的页边空白区,这里没有找出解决空白区域的办法。所以在工作区的宽和高部分采用了减去20的方法暂时解决。
在这里yahoo提供的整层拖动和拉伸功能,似乎只能在firefox中测试通过,ie9并不能进行实现。而且在测试时,发现yahoo底层提供的javascripe脚本需要移除,否则会造成打开太慢的问题,还有在引用css样式和js脚本时,可以通过下载的方式保存到本地,然后通过修改路径的方法使用它们,这样就能在基本上实现快速响应的需要。
初始主页面提供左边树表列表,通过功能点南后,能够在右边主面板出现对应功能。
- 行情报价
行情报价主要使用数据源(DataSource),数据表格(DataTable).
数据源:
可以用以下代码进行构造该子类对象:
// DataSources for all kinds of local data
var dsLocalArray = new YAHOO.util.LocalDataSource(["apples", "broccoli", "cherries"]);
var dsLocalJSON = new YAHOO.util.LocalDataSource({
found: 3,
total: 20,
results: [
{name: "apples", type:"fruit", color: "red"},
{name: "broccoli", type:"veg", color: "green"},
{name: "cherries", type:"fruit", color: "red"}
]
});
var dsLocalTable = new YAHOO.util.LocalDataSource(YAHOO.util.Dom.get("myTable"));
// DataSource for a server accessed over XHR
var dsXHR = new YAHOO.util.XHRDataSource("http://local_path_or_path_to_proxy");
// DataSource for a remote location with dynamic script nodes
var dsScriptNode = new YAHOO.util.ScriptNodeDataSource("http://path_to_webservice");
// DataSource for a JavaScript function that returns data
var dsFunction = new YAHOO.util.FunctionDataSource(function() {
return ["apples", "broccoli", "cherries"];
});
. 远程数据
位于远程服务中,需使用XHRDataSource or a ScriptNodeDataSource类型。
本地数据
位于内存中,可简单使用JavaScript array, a JSON struct, a local XML document, a delimited string, or an HTML table element类型。
当前数据源说明:
见tab0_quote_1_1.htm:
一共准备yahoo stock api,sina stock api,test三个数据源。时间不够,在此只完成sina stock api datasource。
各数据源与表现层不一致,故只需要将它放成js文件。如新浪的数据js文件:js/tab0_quote_data_sina.js。
由于在之前开发中,漏了引用其中一个datasource-min.js库,导致data error的发生。这个现象有些奇怪,ie9的开发人员工具及firefox 3.6.13(未启用调试插件),不会发现其它有错误。关于问题解决方法如下:根据最简单的yahoo提供可以运行的sample,一部分一部分的拷贝其代码,直到问题解决。但加上这个引用,只是解决ie9的问题,关于firefox的问题却仍发生,此问题只以留以下详查。
完整引用在此贴上:
<script type="text/javascript" src="http://yui.yahooapis.com/2.8.2r1/build/yahoo-dom-event/yahoo-dom-event.js"></script>
<script type="text/javascript" src="http://yui.yahooapis.com/2.8.2r1/build/connection/connection-min.js"></script>
<script type="text/javascript" src="http://yui.yahooapis.com/2.8.2r1/build/get/get-min.js"></script>
<script type="text/javascript" src="http://yui.yahooapis.com/2.8.2r1/build/datasource/datasource-min.js"></script>
<script type="text/javascript" src="http://yui.yahooapis.com/2.8.2r1/build/element/element-min.js"></script>
<script type="text/javascript" src="http://yui.yahooapis.com/2.8.2r1/build/datatable/datatable-min.js"></script>
- 走势图
暂时使用IFrame直接引入
- 新闻rss
在输入股票使用报价位置 的输入自动完成股票的功能与代码,在下方引入
http://finance.yahoo.com/rss/headline?s=601988.ss 这种地址的IFrame,并将这部分引入在文件js/tab0_rss.js中。
虽然ie9当前版本,我在调试这个页面时,会出现错误,导致页面被强行关闭,并且重新加载该页面。
图5.4.1 Rss页面在浏览器中已经默认使用一些视图样式。
这样,只需要在默认的页面中引入相关的rss地址,即可利用浏览器为我们设置的样式来显示它。
- 自定义标签页面
如果需要打开自定义页面,如百度,可点击标签右侧的+按钮,输入www.baidu.com即可,内部会自动头补上http://,。方便浏览所需的信息。
还可以在左边树,加上自已常用的网点,如新浪,雅虎,详见上方树子顶级other节点实现。也可浏览源码。
由于这只是学术论文,不涉及大众易用信息搜索,所以此处我只将它加了个别的少数大门户网站的地址,以作诠释。
六、问题
1. 树形列表功能较少。
2. 暂时只提供quote的功能,chart等后期再提供。
3. 字符集的问题,需要花时间去处理。
4. 将学术型的研究与商业的想法放在一起,我本身能力与时间有限,只做功能过少,技术方面解释过多,研究方向基本是朝着为了完成该论文的目标而进行,基本上没有过程设计。
七、总结
在结束09计本的专升本脱产课程之际,很怀念学习生活中的老师与学生的师生情谊,帮作此文以纪念。在回想整个学习过程中,有过辛酸和苦辣。
虽然发入的时间较多,但看见yahoo api提供的功能如何丰富,设计出来的界面较为满意。
在此开发结束后,我的javascript的技术也得到较大提高,并且认为互联网巨头们为我们提供广大的功能感到高兴!
在此技术革新,云计算普唱的年代,很高兴能有这么多免费的资源可以利用。
七、 引用
yui官方入口: http://developer.yahoo.com/yui/
Yahoo api 分类页面:
http://developer.yahoo.com/everything.html
yahoo api限制说明页面:
http://info.yahoo.com/guidelines/us/yahoo/ydn/ydn-3955.html
yahoo财经管理代码示例:
http://code.google.com/p/yahoo-finance-managed/
Yahoo图表之技术分析源码:
yahoo报价数据接口说明:(注请使用http://download.finance.yahoo.com/d/quotes.csv接口)
http://www.gummy-stuff.org/Yahoo-data.htm
yahoo api 之YQL所有Table:
http://query.yahooapis.com/v1/public/yql?q=show%20tables;
yahoo api 之DataSource介绍
http://developer.yahoo.com/yui/datasource/
yahoo api3 之DataSource介绍
http://developer.yahoo.com/yui/3/dataschema/
yahoo rss示例:
http://finance.yahoo.com/rss/headline?s=601988.ss
初始页面参考源码:
http://developer.yahoo.com/yui/examples/layout/page_layout_source.html
IFrame自适应大小:
http://zhidao.baidu.com/question/123284838.html
新浪微博API介绍:
http://open.t.sina.com.cn/wiki/index.php/%E9%A6%96%E9%A1%B5
动态弹出式菜单演示:
http://developer.yahoo.com/yui/examples/menu/contextmenu_source.html
开发环境
2011年12月25日
21:27
说明
IDE参考: http://yuilibrary.com/forum/viewtopic.php?p=8129
Eclipse + JSEclipse
Spket IDE is a powerful plug-in for Eclipse for a js-development. It allows you to specify custom js-library profile in JSDoc format, so one can try to port YUI 3 API to JSDoc.
1.下载eclipse
http://www.eclipse.org/downloads/ 下载 Eclipse IDE for JavaScript Web Developers
Windows 32 Bit 的下载地址
2.安装Aptana for eclipse插件(跳过)
Installing via Eclipse
Please copy the following Update Site URL to your clipboard and then follow the steps listed below to add this URL to your Available Software Sites list. Attempting to access this URL using your web browser will return an Access Denied error.
http://download.aptana.com/studio3/plugin/install
- From the Help menu, select Install New Software... to open the Install New Software dialog.
- Paste the URL for the update site into the Work With text box, and hit the Enter (or Return) key.
- In the populated table below, check the box next to the name of the plug-in, and then click the Next button.
- Click the Next button to go to the license page.
- Choose the option to accept the terms of the license agreement, and click the Finish button.
- You may need to restart Eclipse to continue.
源文档 <http://aptana.com/downloads/start>
3.配置Spket
Eclipse开发Js,JQuery等Js环境设置--基于Spket
源文档 <http://singandsuny.blog.163.com/blog/static/18666882201004115457217/>
Js-ext http://cdn.sencha.io/ext-4.0.7-gpl.zip
参考:http://www.ajax-js.com/ext/examples/feed-viewer/view.html
Enterprise architect:
资料
2011年12月26日
21:30
网页转手机应用 phonegap
1.yui的table
yui的datatable在firefox下可能有错误,显示error.
2.一键分享示例:
分享到:http://shareto.com.cn/share.html
微积分:http://www.cutool.com/try/
新浪:
<script type="text/javascript" charset="utf-8">
(function(){
var _w = 72 , _h = 16;
var param = {
url:location.href,
type:'3',
count:'1', /**是否显示分享数,1显示(可选)*/
appkey:'370571421', /**您申请的应用appkey,显示分享来源(可选)*/
title:'', /**分享的文字内容(可选,默认为所在页面的title)*/
pic:'', /**分享图片的路径(可选)*/
ralateUid:'2032496683', /**关联用户的UID,分享微博会@该用户(可选)*/
language:'zh_cn', /**设置语言,zh_cn|zh_tw(可选)*/
rnd:new Date().valueOf()
}
var temp = [];
for( var p in param ){
temp.push(p + '=' + encodeURIComponent( param[p] || '' ) )
}
document.write('<iframe allowTransparency="true" frameborder="0" scrolling="no" src="http://hits.sinajs.cn/A1/weiboshare.html?' + temp.join('&') + '" width="'+ _w+'" height="'+_h+'"></iframe>')
})()
</script>
腾迅返回授权信息:
腾讯转发微博:
<img src="http://v.t.qq.com/share/images/s/weiboicon32.png" border="0" alt="转播到腾讯微博" valign="middle"> <a href="javascript:;" class="tmblog" id="share_btn_1328078325664" style="height:16px;font-size:12px;line-height:16px;">转播到腾讯微博</a>
<script>
var _share_tencent_weibo = function() {
String.prototype.elength = function() {
return this.replace(/[^\u0000-\u00ff]/g, "aa").length;
};
String.prototype.tripurl = function() {
return this.replace(new RegExp("((news|telnet|nttp|file|http|ftp|https)://){1}(([-A-Za-z0-9]+(\\.[-A-Za-z0-9]+)*(\\.[-A-Za-z]{2,5}))|([0-9]{1,3}(\\.[0-9]{1,3}){3}))(:[0-9]*)?(/[-A-Za-z0-9_\\$\\.\\+\\!\\*\\(\\),;:@&=\\?/~\\#\\%]*)*", "gi"), new Array(12).join("aa"));
};
if ( !! window.find) {
HTMLElement.prototype.contains = function(B) {
return this.compareDocumentPosition(B) - 19 > 0
}
};
var _appkey = "801092749" || "801000271"; //你从腾讯微博开放平台获得的appkey
var _web = {
"name": document.title || "",
"href": location.href.replace(/([^\x00-\xff]+)/g,encodeURIComponent("$1")),
"hash": location.hash,
"target": "toolbar=0,status=0,resizable=1,width=630,height=530"
};
var _pic = function(area) {
var _imgarr = area.getElementsByTagName("img");
var _srcarr = [];
for (var i = 0; i < _imgarr.length; i++) {
_srcarr.push(encodeURIComponent(_imgarr[i].src));
}
return _srcarr.join("|");
};
var _text = function() {
var s1 = arguments[0] || "",
s2 = Array().slice.call(arguments, 1).join(" ").replace(/[\s\n]+/g, " "),
k = 257 - s1.tripurl().elength();
var s = s2.slice(0, (k - 4) >> 1);
if (s2.elength() > k) {
k = k - 3;
for (var i = k >> 1; i <= k; i++) {
if ((s2.slice(0, i)).tripurl().elength() >= k) {
break;
}
else {
s = s2.slice(0, i);
}
}
s += "...";
} else {
s = s2;
}
return [s1, s];
};
var _u = "http://share.v.t.qq.com/index.php?c=share&a=index&url=$url$&appkey=" + _appkey + "&assname=liandeliang&title=$title$&pic=$pic$";
var qshare_btn = function(_arr) {
if (_arr[0]) {
return _arr[0];
}
else {
var o = document.createElement("a"),
_ostyle = "width:118px;height:25px;background:url(http://mat1.gtimg.com/app/opent/images/websites/share/qshare.png);position:absolute;display:none;";
o.setAttribute("style", _ostyle);
o.style.cssText = _ostyle;
o.setAttribute("href", "javascript:;");
document.body.insertBefore(o, document.body.childNodes[0]);
return o;
}
} (arguments);
var share_area = function(_arr) {
if (_arr[1]) {
if ((typeof _arr[1] == "object" && _arr[1].length) || (_arr[1].constructor == Array)) {
return _arr[1];
} else {
return [_arr[1]];
}
}
else {
return [document.body];
}
} (arguments);
var current_area = share_area[0];
var share_btn = function(_arr) {
if (_arr[2]) {
_arr[2].onclick = function() {
window.open(_u.replace("$title$", encodeURIComponent(_text(_web.name,"").join(" "))).replace("$url$", encodeURIComponent(_web.href)).replace("$pic$", _pic(share_area[0])).substr(0, 2048), 'undefined', _web.target);
}
} else {
return null;
}
} (arguments);
var _select = function() {
return (document.selection ? document.selection.createRange().text: document.getSelection()).toString().replace(/[\s\n]+/g, " ");
};
var show = function(e, x, y) {
with(qshare_btn.style) {
display = "inline-block";
left = x + "px";
top = y + "px";
position = "absolute";
zIndex = "999999";
}
};
var hide = function(e) {
e.style.display = "none";
};
document.onmouseup = function(e) {
e = e || window.event;
var o = e.target || e.srcElement;
for (var i = 0; i < share_area.length; i++) {
if (share_area[i].contains(o) || share_area[i] == o) {
var _e = {
"x": e.clientX,
"y": e.clientY
};
var _o = {
"w": qshare_btn.clientWidth,
"h": qshare_btn.clientHeight
};
var _d = window.pageYOffset || (document.documentElement || document.body).scrollTop || 0;
var x = (_e.x - _o.w < 0) ? _e.x + _o.w: _e.x - _o.w,
y = (_e.y - _o.h < 0) ? _e.y + _d - _o.h: _e.y + _d;
if (_select() && _select().length >= 10 && o != qshare_btn) {
show(qshare_btn, x - 5, y);
current_area = share_area[i];
break;
} else {
hide(qshare_btn);
}
} else {
hide(qshare_btn);
}
}
};
document.onmouseover = function(e) {
var curtarget = (e && e.target) || (window.event && window.event.srcElement),
sx = parseInt(qshare_btn.style.width),
sy = parseInt(qshare_btn.style.height),
d = Math.min(sx, sy);
if (curtarget.tagName.toLowerCase() == "img") {
var erect = curtarget.getBoundingClientRect();
if (curtarget.clientWidth >= 150 && curtarget.clientHeight >= 150) {
show(qshare_btn, erect.right - sx - d, erect.bottom + document.body.scrollTop + document.documentElement.scrollTop - sy - d);
qshare_btn.setAttribute("shareimg", curtarget.src);
}
} else if (curtarget != qshare_btn && qshare_btn.getAttribute("shareimg")) {
qshare_btn.removeAttribute("shareimg");
hide(qshare_btn);
}
};
document.onmousedown = function(e) {
var curtarget = (e && e.target) || (window.event && window.event.srcElement);
if (curtarget != qshare_btn) {
if (document.selection) {
document.selection.empty();
} else if (window.getSelection) {
window.getSelection().removeAllRanges();
}
}
};
qshare_btn.onclick = function() {
var shareimg = qshare_btn.getAttribute("shareimg");
if (shareimg != null) {
window.open(_u.replace("$title$", encodeURIComponent(_web.name)).replace("$url$", encodeURIComponent(_web.href)).replace("$pic$", encodeURIComponent(shareimg)).substr(0, 2048), 'null', _web.target);
return;
}
var _str = _select();
_resultstr = _text(_web.name, _str).reverse().join(" ");
if (_str) {
var url = _u.replace("$title$", encodeURIComponent(_resultstr)).replace("$pic$", _pic(current_area));
url = url.replace("$url$", encodeURIComponent(_web.href.replace(_web.hash, "") + "#" + (current_area["name"] || current_area["id"] || ""))).substr(0, 2048);
window.open(url, 'null', _web.target);
}
hide(this);
};
};
_share_tencent_weibo(null,null,document.getElementById("share_btn_1328078325664"));
/*
_share_tencent_weibo(qshare_btn,qshare_area,share_btn);
qshare_btn:Q-Share功能按钮,选中文字或鼠标放在功能区域中的大图上后显示的转播按钮
qshare_area:Q-Share功能区域,可以是一个Dom数组
share_btn:一键转播功能按钮,点击后将会弹出转播页面
如须自定义功能,qshare_btn,share_area,share_btn自己设置,其中qshare_area可以是一个DOM数组
*/
</script>
rss:
北京晨报: http://www.morningpost.com.cn/rssdy/index.shtml
<a target="_blank" href="http://mail.qq.com/cgi-bin/qm_share?t=qm_mailme&email=6djb2d3d0N3b3qmYmMeKhoQ" style="text-decoration:none;">给我写信</a>
Andriod
2012年4月4日
10:10
1.
1.准备
2012年4月4日
10:10
1.谷歌andriod的在线商店
2.点击下方的"开发人员"
3.点击右边的Download,下载安装软件
点击右边的Publish,发现注册要$25的注册金.
Sitemap
2012年2月25日
16:39
仿: http://www.live754.com/house_sitemap.xml
qt
2012年2月21日
9:04
c++ web混合开发
2012年2月21日
9:04
源文档 <http://www.cppblog.com/eXile/archive/2009/03/09/75997.html>
c++ webkit FormExtractor
Memory cache
2012年2月20日
22:34
2012-2-20
- 下载Memcached
-d install
-d start
这两条命令是做为服务启动
- 下载php_memcached
- 拷贝 php_memcache.dll 到 x:\develop\xampp\php\ext
- x:\develop\xampp\php\php.ini 增加 extension=php_memcache.dll
- 重启apache
源文档 <http://www.ccvita.com/258.html>
源文档 <http://www.cnblogs.com/qiantuwuliang/archive/2011/03/07/1974499.html>
Firefox
2012年2月20日
19:58
插件目录:
C:\Documents and Settings\liandl\Application Data\Mozilla\Firefox\Profiles\jwzavmfd.default\extensions
ff访问js
2012年2月20日
20:09
2012-2-20
文章时间: 2008-10-28 周二, 15:07 标题: 引用回复
你的意思是想从plugin中调用javascript的函数吗?
有好几种办法可以调,比如
1.直接调用javascript中固定名字的函数
NPN_GetURL(NPP instance,
const char* url,
const char* target);
详细说明在这
https://developer.mozilla.org/En/NPN_GetURL
第二个参数url设置为"javascript:yourFun(params)",其中的yourFun(params)就是你要调的函数名和相应的参数值。第三个参数target为"_self"就可以。
2.你有一个指向javascript函数的NPObject 对象,要去调对应的javascript函数:
使用NPN_InvokeDefault
详细说明
https://developer.mozilla.org/En/NPN_InvokeDefault
这个函数的参数很容易看明白。
源文档 <http://g.mozest.com/viewthread.php?tid=26210>
how to call a function in Firefox extension from a html button
Interaction between privileged and non-privileged pages
silverlight
2012年2月20日
15:35
呼叫js
2012年2月20日
15:35
2012-2-20
问题:如何解决silverlight5在网页中运行,无法创建sapi对象?
微软发布Silverlight Native Extensions 1.0扩展OOB应用功能
源文档 <http://kevinfan.blog.51cto.com/1037293/482579>
http://archive.msdn.microsoft.com/nesl
silverlight 退出系统(关闭当前网页),通过调用JS
源文档 <http://2771253.blog.51cto.com/2761253/545904>
Silverlight与Html/JavaScript互操作
源文档 <http://www.cnblogs.com/cofd/archive/2007/11/28/975116.html>
源文档 <http://winsystem.ctocio.com.cn/310/12107310.shtml>
Silverlight与浏览器通信技术总结2:Silverlight与JavaScript互访
源文档 <http://www.cnblogs.com/erichan/archive/2010/05/20/1739722.html>
论坛
2012年2月20日
8:52
discuze
2012年2月20日
8:52
源文档 <http://www.discuz.net/thread-222736-1-1.html>
FTChinese也用这个论坛进行回复
google
2012年2月15日
9:04
2012-2-18
google搜索 http://ajax.googleapis.com/ajax/services/feed/find
2012-2-17
http://code.google.com/p/r2-release/wiki/GoogleReaderApi
源文档 <http://code.google.com/p/google-feedserver/>
Google Reader API – A Brief Tutorial
源文档 <http://mindsharestrategy.com/2010/google-reader-api-a-brief-tutorial/>
2012-2-16 以前
google 关键字:rss api
https://developers.google.com/feed/v1/
Google Base Data API (No Longer Available)
源文档 <http://code.google.com/intl/zh-CN/apis/base/samples/php/php-sample-zend.html>
http://framework.zend.com/releases/ZendGdata-1.11.11/ZendGdata-1.11.11.zip
How-To Parse RSS Feeds With Google's Feed API
源文档 <http://raventools.com/blog/how-to-parse-rss-feeds-with-googles-feed-api/>
查找feed: https://ajax.googleapis.com/ajax/services/feed/find?v=1.0&q=关键字
加载feed: https://developers.google.com/feed/v1/jsondevguide#loadBasic
Html5
2012年2月4日
10:57
Audio
2012年2月4日
10:57
2012-2-20
HTML5 Audio/Video 标签,属性,方法,事件汇总 (转)
源文档 <http://www.douban.com/note/158621500/>
中间的source只能指定一个,超过一个,浏览器判断它的类型,并指定一个.
2012-2-19 以前
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
<script>
function playmp3(){
var a = document.getElementById("playctl");
a.src = "translate_tts.mp3";
}
function stopmp3(){
var a = document.getElementById("playctl");
a.src = "";
}
function playmp32(){
var a = document.getElementById("playctl");
a.play();
}
function stopmp32(){
var a = document.getElementById("playctl");
a.pause();
}
</script>
</head>
<body>
<audio id='playctl' src="translate_tts.mp3">
您的浏览器不支持 audio 标签。
</audio>
<div id="play" onmouseover="this.style.cursor='pointer';" onclick="playmp32();">点击播放</div>
<div id="stop" onmouseover="this.style.cursor='pointer';" onclick="stopmp32();">点击停止</div>
<div id="play2" />
</body>
</html>
对该标签的介绍: http://msdn.microsoft.com/zh-CN/ie/hh377903
支持: onended='music.next()' // http://hellophper.com/htm/4/397.html
事件:
canplaythrough: 知道浏览器何时真正下载音频剪辑,并准备好播放
语音
2012年2月2日
14:51
2012-5-3
The Javascript API
源文档 <http://www.speechapi.com/apis/javascript/>
2012-3-5
源文档 <https://labs.ericsson.com/cn>
2012-2-20
PHP Content-type 的说明
源文档 <http://hi.baidu.com/shooke1/blog/item/d49fdf82fe70ed9af703a661.html>
源文档 <http://www.cnblogs.com/guozhenyp/archive/2011/11/01/2231414.html>
audio 在ie9及firefox下有问题.
2012-2-19 以前
http://www.ispeech.org/api#tts
&format=mp3&frequency=44100&bitrate=128&speed=1&startpadding=1&endpadding=1
源文档 <http://www.ispeech.org/api>
<audio controls="controls">
<source src="song.ogg" type="audio/ogg" />
<source src="song.mp3" type="audio/mpeg" />
Your browser does not support the audio element.
</audio>
源文档 <http://www.w3schools.com/html5/html5_audio.asp>
Google translator api: http://coderscult.com/javascript-ajax/2008/03/22/google-translate-working-example/
git://github.com/kripken/speak.js.git
<object classid="clsid:2398E32F-5C6E-11D1-8C65-0060081841DE" id="TextToSpeech1" data="DATA:application/x-oleobject;BASE64,L+OYI25c0RGMZQBgCBhB3gICAADYEwAA2BMAAA==
" width="6" height="6">
</object>
<script language="javascript">
<!--
function start(){
TextToSpeech1.Speak(document.all["main"].innerText);
}//*开始朗读
function pause(){
TextToSpeech1.Pause();
}//*暂停朗读
function resume(){
TextToSpeech1.Resume();
}//*继续朗读
function end(){
TextToSpeech1.StopSpeaking();
}//*停止朗读
//-->
</script>
<a href="javascript:void start()">朗读</a> <a href="javascript:void pause()">暂停</a> <a href="javascript:void resume()">继续</a> <a href="javascript:void end()">停止</a>
好象运行的时候什么反应都没有的?
问题补充:
<form id="form1" name="form1" method="post" action="">
<label>
<textarea name="main" id="main" cols="45" rows="5"></textarea>
</label>
</form>
安装OFFICE也不行啊.
还有这段代码没有发出来,有没有错误啊
源文档 <http://zhidao.baidu.com/question/58257744.html>
Mysql
2012年1月26日
20:18
这类的数据 要把"/"分隔符前面的内容删除掉(包含分隔符) 请问各位大虾 有什么解决方法?
mysql> select substring_index("/aa/bb/cc/9851110",'/',-1);
+---------------------------------------------+
| substring_index("/aa/bb/cc/9851110",'/',-1) |
+---------------------------------------------+
| 9851110 |
+---------------------------------------------+
1 row in set (0.00 sec)
Php
2012年1月12日
19:26
1.将session_start放在头部,并且将文件设置为utf8无bom
$a == $b 等于 TRUE,如果 $a 等于 $b。
$a === $b 全等 TRUE,如果 $a 等于 $b,并且它们的类型也相同。(PHP 4 引进)
$a != $b 不等 TRUE,如果 $a 不等于 $b。
$a <> $b 不等 TRUE,如果 $a 不等于 $b。
$a !== $b 非全等 TRUE,如果 $a 不等于 $b,或者它们的类型不同。(PHP 4 引进)
$a < $b 小与 TRUE,如果 $a 严格小于 $b。
$a > $b 大于 TRUE,如果 $a 严格 $b。
$a <= $b 小于等于 TRUE,如果 $a 小于或者等于 $b。
$a >= $b 大于等于 TRUE,如果 $a 大于或者等于 $b。
PHP 符号大全
注解符号:
// 单行注解
/* */ 多行注解
引号的使用
' ' 单引号,没有任何意义,不经任何处理直接拿过来;
" "双引号,php动态处理然后输出,一般用于变量.
变量形态:
一种是True 即 真的;
另一种是False 即假的
常见变量形态:
string 字串(数字\汉字\等等)
integer 整数(1、2、3、4、5、0、-1、-2、等等)
double 浮点数(小数点)
array 数组
object 对象
可以用的方法有gettype($mix) 和settype($mix,$typename);
常用符号
\" 双引号
\\ 反斜线
\n 换行
\r 送出
\t 跳位(TAB)
运算符号
+ 加法运算 - 减法运算
* 乘法运算 / 除法运算
% 取余数 ++ 累加
-- 累减1 . 把字串相加
设定运算
= 把右边的值代入左边(一定要会)
+= 把右边的值加到左边
-= 把右边的值减到左边
*= 把左边的值乘以右边
/= 把左边的值除以右边
.= 把右边的字串加到左边
位员运算
& 且
| 或
^ 互斥(xor)
<< 向左移位
>> 向右移位
~ 取1的补数
逻辑运算
< 小于 > 大于
<= 小于等于 >= 大于等于
!= 不等于 && 而且
|| 或者 ! 不
其他运算符号
$ 变量符号
& 变量的指标(加在变量前)
@ 不显示错误信息(加在函数前)
-> 对象的方法或者属性
=> 数组的元素值
? : 三元运算子
基本方法
1.PHP转换字符串为大小写!
strtolower(); 把字符转小写
strtoupper(); 把字符转大写
2.PHP加密字符串(大小写均可)
md5();加密
sha1();加密
3.关于引号
一、单引号是原样输出
二、双引号是内容解释进行输出
三、反单引号是执行一个命令,如`pwd`。
四、"\"作用于转译字符,如"\n"为换行!
4.函数:htmlspecialchars()
本函数将特殊字符转成 HTML 的字符串格式 ( &....; )。最常用到的场合可能就是处理客户留言的留言版了。
& (和) 转成 &
" (双引号) 转成 "
< (小于) 转成 <
> (大于) 转成 >
此函数只转换上面的特殊字符,并不会全部转换成 HTML 所定的 ASCII 转换。
5.批量输出HTML内容!
echo <<< EOT
HTML输出内容。。。//这里注释照样输出!
EOT;
Print <<<EOT
HTML输出内容。。。//这里注释照样输出!
EOT;
(注意:内部包含变量用"{变量}")
6.判断文件是否存在并且输出内容
<?php
$FileName="File.TXT";
if (File_Exists($FileName)){
Echo "<xmp>".File_Get_Contents($FileName)."</xmp>";
}else
{
Echo"no";
}
?>
7.卸载变量unset;
unset($var);
unset($var,$var1);
8.is_int;
检测变量是否是整数;
9.is_null;
检测变量是否为 NULL ;
10.is_string
检测变量是否是字符串
11.is_real;
is_float() 的别名
12.isset
检测变量是否设置
13.is_bool
检测变量是否是布尔型
14.is_array
检测变量是否是数组
15.is_object
检测变量是否是一个对象
16.SubStr.
SUBSTR(String,Start,SelectNum)
echo substr('abcdef', 1); // bcdef
echo substr('abcdef', 1, 3); // bcd
echo substr('abcdef', 0, 4); // abcd
echo substr('abcdef', 0, 8); // abcdef
echo substr('abcdef', -1, 1); // f
17.Nb2br
echo nl2br("foo isn't\n bar");
把转义的换行变成 HTML的<BR />
try catch
2012年3月15日
18:00
<?php
//创建可抛出一个异常的函数
function checkNum($number)
{
if($number>1)
{
throw new Exception("Value must be 1 or below");
}
return true;
}
//在 "try" 代码块中触发异常
try
{
checkNum(2);
//If the exception is thrown, this text will not be shown
echo 'If you see this, the number is 1 or below';
}
//捕获异常
catch(Exception $e)
{
echo 'Message: ' .$e->getMessage();
}
?>
源文档 <http://www.w3school.com.cn/php/php_exception.asp>
Urlencode
2012年3月7日
23:13
urldecode
urlencode
Json
2012年2月18日
22:27
$x = json_decode('{"foo": 123456789012345}');
echo sprintf('%1$f', $x->foo).PHP_EOL;
源文档 <http://www.php.net/manual/zh/function.json-decode.php>
String
2012年2月13日
21:46
1. 字符串比较
在PHP中,可以用==(双等号)或者 ===(三等号)来比较字符串。两者的区别是双等号不比较类型,三等号会比较类型,它不转换类型;用双等号进行比较时,如果等号左右两边有数字类型的值,刚会把另一个值转化为数字,然后进行比较。这样的话,如果是纯字符串或者NULL时,会转化为0进行比较。同样,大小于号也和等号一样,比较时可能出现不正确的结果。
所以,比较字符串可以用PHP的自带函数strcmp和strcasecmp。其中strcasecmp是strcmp的变种,它会先把字符串转化为小写再进行比较。 如下代码:
复制代码 代码如下:
var_dump(0 == 'Test');
var_dump(0 == '');
var_dump(5 > 'T');
var_dump(strcmp(5, 'T'));
结果为(第1~3结果是不对的,只有第4个是对的):
复制代码 代码如下:
bool(true)
bool(true)
bool(true)
int(-1)
2. 字符串处理
1. 子串
$sub = substr(string, start[, length]);
2. 子串替换
$newstring = substr_replace(string, new, start[, length]);
用这个函数可以实现字符串的插入,删除操作。这个函数的start和length可以为负数。分别表示从后开始计算以及保留最后几位不替换。 3. 字符串反序
$newstring = strrev(string);
4. 重复字符串
$newstring = str_repeat(string, count);
返回一个重复count次string的新字符串。
5. 填充字符串
$newstring = str_pad(to_pad, length[, with[, type]]);
其中type有:STR_PAD_RIGHT(默认)、STR_PAD_LEFT和STR_PAD_BOTH三种;with默认为空格。函数表示把to_pad字符串用with填充为一个长度为length的字符串。 如下代码:
复制代码 代码如下:
// 子串
var_dump(substr('1234567890', 8)); // 90
var_dump(substr('1234567890', 0, 2)); // 12
// 反方向子串
var_dump(substr('1234567890', -8)); // 34567890
var_dump(substr('1234567890', -8, -2)); // 345678
var_dump(substr('1234567890', -8, 2)); // 34
// 插入
var_dump(substr_replace('1234567890', 'a', 0, 0)); // a1234567890
// 删除
var_dump(substr_replace('1234567890', '', 8)); // 12345678
// 反方向删除
var_dump(substr_replace('1234567890', '', -2, -1)); // 123456780
// 替换
var_dump(substr_replace('1234567890', 'a', 0, 1)); // a234567890
// 反方向替换
var_dump(substr_replace('1234567890', 'a', -2, -1)); // 12345678a0
// 字符串反转
var_dump(strrev('1234567890')); // 0987654321
// 重复字符串
var_dump(str_repeat('12', 3)); // 121212
// 填充字符串
var_dump(str_pad('a', 10, '12')); // a121212121
var_dump(str_pad('a', 10, '12', STR_PAD_LEFT)); // 121212121a
var_dump(str_pad('a', 10, '12', STR_PAD_BOTH)); // 1212a12121
3. 分解字符串
在PHP中,字符串的分解用explode,合并用implode(join是implode的别名),标记用strtok。还有另一个函数slipt也可以分解(正则分解),但5.3以后版本已经不推介了。 另外PHP中还有一个sscanf()函数,用于读取字符串。
strtok标记时,用strtok($str, $token)来初始化,用strtok($token)来继续取值。
代码如下:
复制代码 代码如下:
$str = '1,2,3';
$arr1 = explode(',', $str); // array('1', '2', '3')
$arr2 = explode(',', $str, 2); // array('1', '2,3')
$str1 = implode(',', $arr1); // '1,2,3'
$str2 = strtok($str, ','); // 1
$str3 = strtok(','); // 2
$str4 = strtok(','); // 3
// array(86, 10, 88888888, 'Beijin')
$arr3 = sscanf('+86(10)88888888 Beijin', '+%d(%d)%d %s');
4.字符串查找
在PHP中,字符串的查找有三个系列。返回位置的、返回字符串的、掩码个数匹配。其中,返回位置的的函数一共有两个,strpos()和 strrpos();返回字符串的也有两个strstr()和strchr();返回掩码匹配数的函数有strspn()和strcspn()。
strpos表示从左边开始计数,返回要查找的字符串第一次出现的位置;strrpos表示从右边计数,返回要查找的字符串第一次出现的位置。
strstr表示从左边计数,返回要查找字符串第一次到结尾的子串(包括查找字符串),当查找的是字符时,可以用ascii码数字来表示字符;stristr表示不区分大小查找;strchr是strstr的别名;strrchr返回字符最后出现到结尾的子串。
strspn表示从左边计数,第一次出现非掩码之前的子串的字符数;strcspn表示从左边计数,第一次出现掩码之前的子串的字符数。
示例代码:
复制代码 代码如下:
$pos = strpos('This a hello world program', ' '); // 4
$pos = strpos('This a hello world program', 32); // 4
$pos = strrpos('This a hello world program', ' '); // 18
$pos = strrpos('This a hello world program', 32); // 18
$str = strstr('This a hello world program', ' '); // " a hello world program"
$str = strstr('This a hello world program', 32); // " a hello world program"
$str = stristr('This a hello world program', ' A'); // "a hello world program"
$str = stristr('This a hello world program', 65); // "a hello world program"
$str = strrchr('This a hello world program', ' '); // " program"
$str = strrchr('This a hello world program', 32); // " program"
$str1 = "12345 12345 12345";
$len = strspn($str1, '12345'); // 5
$len = strcspn($str1, ' '); // 5
详细出处参考:http://www.jb51.net/article/26865.htm
xml
2012年2月7日
9:13
<?php
$xmlDoc = new DOMDocument();
$xmlDoc->load("note.xml");
print $xmlDoc->$encoding;
?>
源文档 <http://www.iteye.com/problems/19534>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
<channel>
<title>...</title>
<link>...</link>
<atom:link href="http://www.softarea51.com/rss/windows/Web_Development/XML_CSS_Utilities.xml" rel="self" type="application/rss+xml"/>
<description>...</description>
源文档 <http://www.softarea51.com/rss/windows/Web_Development/XML_CSS_Utilities.xml>
$rss->documentElement => <rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
childNode => 为属性?
Gzip
2012年2月5日
11:05
datatype | gzip | length |
|
|
|
|
|
json | n | 28kb |
|
|
|
|
|
json | 9 | 8kb |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Post
2012年1月21日
9:02
PHP POST数据的三种方法
php有三种方法可以post数据,分别为Curl、socket、file_get_contents:
/**
* Socket版本
* 使用方法:
* $post_string = "app=socket&version=beta";
* request_by_socket('facebook.cn','/restServer.php',$post_string);
*/
function request_by_socket($remote_server,$remote_path,$post_string,$port = 80,$timeout = 30){
$socket = fsockopen($remote_server,$port,$errno,$errstr,$timeout);
if (!$socket) die("$errstr($errno)");
fwrite($socket,"POST $remote_path HTTP/1.0\r\n");
fwrite($socket,"User-Agent: Socket Example\r\n");
fwrite($socket,"HOST: $remote_server\r\n");
fwrite($socket,"Content-type: application/x-www-form-urlencoded\r\n");
fwrite($socket,"Content-length: ".strlen($post_string)+8."\r\n");
fwrite($socket,"Accept:*/*\r\n");
fwrite($socket,"\r\n");
fwrite($socket,"mypost=$post_string\r\n");
fwrite($socket,"\r\n");
$header = "";
while ($str = trim(fgets($socket,4096))) {
$header.=$str;
}
$data = "";
while (!feof($socket)) {
$data .= fgets($socket,4096);
}
return $data;
}
/**
* Curl版本
* 使用方法:
* $post_string = "app=request&version=beta";
* request_by_curl('http://facebook.cn/restServer.php',$post_string);
*/
function request_by_curl($remote_server,$post_string){
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$remote_server);
curl_setopt($ch,CURLOPT_POSTFIELDS,'mypost='.$post_string);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_USERAGENT,"Jimmy's CURL Example beta");
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
/**
* 其它版本
* 使用方法:
* $post_string = "app=request&version=beta";
* request_by_other('http://facebook.cn/restServer.php',$post_string);
*/
function request_by_other($remote_server,$post_string){
$context = array(
'http'=>array(
'method'=>'POST',
'header'=>'Content-type: application/x-www-form-urlencoded'."\r\n".
'User-Agent : Jimmy\'s POST Example beta'."\r\n".
'Content-length: '.strlen($post_string)+8,
'content'=>'mypost='.$post_string)
);
$stream_context = stream_context_create($context);
$data = file_get_contents($remote_server,FALSE,$stream_context);
return $data;
}
?>
页面跳转
2012年1月21日
8:48
header("Refresh: 0; url=".$url);
header("location:url") ie cookie有问题
cookie和session
2012年1月19日
22:37
ie的iframe设置cookie的解决:
在设置cookie前,加上这一行:
header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
跨域cookie:
http://stackoverflow.com/questions/389456/cookie-blocked-not-saved-in-iframe-in-internet-explorer
php端cookie需要设置路径及时间,然后本地端 javascript 才可以读取到该cookie
HP 中cookie 和session 的分析
源文档 <http://www.cnblogs.com/analyzer/articles/847154.html>
PHP中Cookie及其使用
源文档 <http://www.enet.com.cn/article/2005/0315/A20050315398525.shtml>
JavaScript Cookies
源文档 <http://www.w3school.com.cn/js/js_cookies.asp>
判断mysql插入成功
2012年1月18日
22:16
$str_sql="insert into table .....";
$result=mysql_db_query($dbname,$str_sql,$link_id);
if (!$result){
echo 'MySQL插入命令失败!';
}
else{
echo '插入成功!';
}
源文档 <http://www.pcveke.cn/simple/?t24534.html>
file_get_contents
2012年1月15日
22:38
问题:file_get_contents failed to open stream: HTTP request failed!
处理:(sina sae上面好像已经是这个)
设置php.ini里面的user_agent,php默认的user_agent是PHP,我们把它改成Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)来模拟浏览器就可以了
user_agent="Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
源文档 <http://www.php100.com/html/webkaifa/PHP/PHPyingyong/2010/0826/5308.html>
Array
2012年1月12日
19:26
申明数组:
$nodes = array();
while ($line = db_fetch_assoc($result)) {
$nodes[] = array(
'id' => $line['id'],
'text' => $line['text']
);
}
使用数组:
<?php
function outputArray($isXml,$nodes){
if ($isXml) {
$xmlDoc = new DOMDocument("1.0","utf-8");
$root = $xmlDoc->appendChild($xmlDoc->createElement("nodes"));
foreach ($nodes as $node) {
$xmlNode = $root->appendChild($xmlDoc->createElement("node"));
foreach($node as $key=>$value){
$xmlTextNode = $xmlDoc->createTextNode($value);
$xmlUrlNode = $xmlDoc->createElement($key);
$xmlUrlNode->appendChild($xmlTextNode);
$xmlNode->appendChild($xmlUrlNode);
}
}
header("Content-Type: text/xml");
$xmlDoc->formatOutput = true;
echo $xmlDoc->saveXml();
} else {
header("Content-type: application/json");
echo json_encode($nodes);
}
}
?>
ExtJs
2012年1月8日
12:25
Ext ui design:
http://www.pc6.com/softview/SoftView_57476.html#download
聊天IM: https://ext-jame.svn.sourceforge.net/svnroot/ext-jame ext-jame
连接数据源
var conn = new Ext.data.Connection;
conn.request({
url: url,
callback: function(options, success, response)
{
if (success)
{
var dq = Ext.DomQuery;
var xml = response.responseXML;
var node = xml;
//var node = dq.selectNode('nodename', xml);
}
}
});
4.1.3 Ext.apply介绍
apply及applyIf方法都是用于把一个对象中的属性复制到另外一个对象的属性中。两者的差异在于apply将会覆盖目标对象中的属性,而applyIf只复制目标对象中没有而源对象中有的属性。在Ext
源文档 <http://book.51cto.com/art/201003/191903.htm>
定义数据结构:
Ext.define('Feed', {
extend: 'Ext.data.Model',
fields: ['title', 'url','cls','leaf']
});
使用数据结构:
model: 'Feed',
css
2012年3月9日
8:47
修改样式:
var styleValue = "" + fontSize + "px";
Ext.util.CSS.updateRule( '.feed-grid .x-grid-rowbody', 'fontSize', styleValue );
this.grid.doLayout();
修改主题:
Ext.util.CSS.swapStyleSheet('theme', combo.getValue());
Saas css
2012年3月6日
21:50
ExtJs4 与 SASS 的亲密接触——使用 SASS 自定义主题
SASS 是一个在 Ruby 社区兴起的样式语言,支持嵌套、变量、混入、继承等等语言特性,通过命令行工具或Web框架插件生成标准的 CSS 样式(参加SASS主页http://sass-lang.com/)。使用 SASS 定义的样式代码更少、更清晰,更重要的是减少重复代码,符合 DRY 原则。让人高兴的是,ExtJs4 已经转向 SASS,你可以在 ext-4.0.2a\resources\sass\ 找到所有 ExtJs 样式的 SASS 版本。
由于 SASS 支持变量,所以修改/覆盖样式变得更加容易。例如,只要把 ExtJs 预定义的一个名为 $base-color 的变量重新赋值为 #a1c148(绿色),所有 Ext 控件的底色就会全都变成绿色了。在 ext-4.0.2a\resources\themes\stylesheets\ext4\default\variables\ 文件夹里可以找到所有预定义的变量。
下面我们一步一步地演练一下使用 SASS 自定义样式的全过程。
准备工作
Step1
下载 ExtJs4. http://www.sencha.com/products/extjs/download
Step2
下载 Ruby。在
http://www.ruby-lang.org/en/downloads/
页,如果你是 Windows 用户应该下载"Ruby on Windows" 节下的"Ruby 1.9.2-p180 RubyInstaller"。下载后将 Ruby 安装到 D:\Ruby192\。为方便使用Ruby命令行工具,安装时建议勾选"Add Ruby executables to your PATH"选项。
Step3
安装 Compass/SASS。打开 Windows 命令行,执行
gem install compass
安装后,可使用命令
compass -v
sass -v
检验是否已成功安装了 compass 和 sass。
创建网站,规划目录
Step4
创建一个 MVC 网站,添加一个名为 MyThemDemoController 的控制器,以及配套的 Views\MyThemDemo\MyThemDemo.aspx 和 Scripts\Demo\MyThemDemo.js。把 Step1 中下载的 ext-4.0.2a 复制到网站的 Scripts 目录下。在 IIS 中创建网站,我把端口设成了 6000,你如果想偷懒的话可以下载我建好的整个
Demo 项目,但是要注意 1)别忘了在IIS中建网站,端口是 6000,2)ext-4.0.2a 一共 128M,我为了节省上传、下载时间没有放进去,3)Demo 页 URL 是
http://localhost:6000/MyThemDemo/MyThemDemo.
Step5
把 Scripts\ext-4.0.2a\resources\themes\templates\resources 文件夹复制到 Scripts 文件夹下。把 Scripts\ext-4.0.2a\resources\themes\images\default 文件夹复制到 Scripts\resources 文件夹下,并把它由 "default"重命名为"images"。之后你的目录结构应该如下图所示。
由 SASS 生成 CSS
Step6
修改 Scripts\resources\sass\config.rb 中的 $ext_path 变量,使其指向 ExtJs 根目录。
$ext_path = ".. /.. /ext-4.0.2a"
注意".."和"/"之间不要有空格,天杀的博客园居然会把
".. /.. /"替换为"http://www.cnblogs.com",逼得我没办法只好加了个空格进去
囧
Step7
修改 Scripts\ext-4.0.2a\resources\themes\lib\utils.rb 第 62 行,由
images_path = File.join($ext_path, 'resources', 'themes', 'images', theme)
修改为
images_path = relative_path
这样 ExtJs 将使用 Scripts\resources\images 下的图片而不是 Scripts\ext-4.0.2a\resources 下的图片。
Step8
打开 Windows 命令行,进入 Scripts\resources\sass 目录下,执行命令
> compass compile
此命令会在 Scripts\resources\css 文件夹下生成 my-ext-theme.css 文件。
修改 $base-color 变量,查看效果
Step9
编辑 Scripts\resources\sass\my-ext-theme.scss,在
"@import 'ext4/default/all';" 这一行之前插入一行
$base-color: #a1c148;
注意
对变量的重新赋值的语句都应该放在
"@import 'ext4/default/all';" 这一行之前。
Step10
再次打开 Windows 命令行,进入 Scripts\resources\sass 目录下,执行命令
> compass compile
重新生成CSS文件。
Step11
编辑 MyThemDemo.aspx,添加对 my-ext-theme.css 等文件的引用。
Step12
编辑 MyThemDemo.js,把 Scripts\ext-4.0.2a\examples\themes\themes.js 里的内容全部复制到 MyThemDemo.js 里面。
Step13
打开浏览器,进入
http://localhost:6000/MyThemDemo/MyThemDemo
即可看到效果了。
但是如何能够实时更改样式呢?(以便达到这个视频所演示的效果),偶也不知道。你要是知道的话请告诉我!
本文主要内容来自http://www.sencha.com/learn/theming/。
源文档 <http://www.cnblogs.com/1-2-3/archive/2011/07/31/ExtJs4-SASS-Custom-Theme.html>
xml格式化
2012年3月1日
22:28
<html>
<head>
<title>Indent XML</title>
<script language="JavaScript" type="text/javascript" src="http://code.jquery.com/jquery-latest.js"> </script>
<script language="JavaScript" type="text/javascript;e4x=1">
$(function() {
$('button').click(function() {
$('textarea').val(new XML($('textarea').val()).toXMLString());
});
});
</script>
</head>
<body>
<div>
<textarea rows="8" cols="40"></textarea>
</div>
<div><button>Indent</button></div>
</body>
</html>
源文档 <http://www.oschina.net/code/snippet_58387_4743>
Append
2012年2月20日
21:42
Ext.DomHelper.append('validation-rule',{
tag:'option', value:rules[i], html:rules[i]
});
源文档 <http://www.sencha.com/forum/showthread.php?3760-How-to-Ext.DomHelper.append>
Ext.DomHelper.useDom = true;
before your call to append the option.
源文档 <http://www.sencha.com/forum/showthread.php?3760-How-to-Ext.DomHelper.append>
Combobox
2012年2月19日
10:09
创建自动完成列表:
{xtype:'xautocombo',
id:'autocombosearch',
listeners:{
select: {
fn: function(cb, records, index) {
var record = records[0];
},
scope: this
},
keypress: {
fn: function(comboBox, e){
if (e.getCharCode() == e.ENTER) {
Ext.getCmp('viewFeedHeader').onSearchOk();
}
},
scope: this
},
specialKey : function(field, e){
if(e.getKey() == e.ENTER) {
Ext.getCmp('viewFeedHeader').onSearchOk();
}
}
}
}
Store
2012年2月18日
23:34
如果有id,则id要不同,否则无法显示出来
Hidden
2012年2月6日
16:47
hidden:true,
Xtype
2012年2月4日
19:11
基本组件: |
|
|
xtype | Class | 描述 |
button | Ext.Button | 按钮 |
splitbutton | Ext.SplitButton | 带下拉菜单的按钮 |
cycle | Ext.CycleButton | 带下拉选项菜单的按钮 |
buttongroup | Ext.ButtonGroup | 编组按钮(Since 3.0) |
slider | Ext.Slider | 滑动条 |
progress | Ext.ProgressBar | 进度条 |
statusbar | Ext.StatusBar | 状态条,2.2加进来,3.0 又去了 |
colorpalette | Ext.ColorPalette | 调色板 |
datepicker | Ext.DatePicker | 日期选择面板 |
容器及数据类组件 |
|
|
xtype | Class | 描述 |
window | Ext.Window | 窗口 |
viewport | Ext.ViewPort | 视口,即浏览器的视口,能随之伸缩 |
box | Ext.BoxComponent | 盒子组件,相当于一个 <div> |
component | Ext.Component | 组件 |
container | Ext.Container | 容器 |
panel | Ext.Panel | 面板 |
tabpanel | Ext.TabPanel | 选项面板 |
treepanel | Ext.tree.TreePanel | 树型面板 |
flash | Ext.FlashComponent | 显示 Flash 的组件(Since 3.0) |
grid | Ext.grid.GridPanel | 表格 |
editorgrid | Ext.grid.EditorGridPanel | 可编辑的表格 |
propertygrid | Ext.grid.PropertyGrid | 属性表格 |
editor | Ext.Editor | 编辑器 |
dataview | Ext.DataView | 数据显示视图 |
listview | Ext.ListView | 列表视图 |
工具栏组件: |
|
|
xtype | Class | 描述 |
paging | Ext.PagingToolbar | 分页工具条 |
toolbar | Ext.Toolbar | 工具栏 |
tbbutton | Ext.Toolbar.Button | 工具栏按钮 |
tbfill | Ext.Toolbar.Fill | 工具栏填充区 |
tbitem | Ext.Toolbar.Item | 工具条项目 |
tbseparator | Ext.Toolbar.Separator | 工具栏分隔符 |
tbspacer | Ext.Toolbar.Spacer | 工具栏空白 |
tbsplit | Ext.Toolbar.SplitButton | 工具栏分隔按钮 |
tbtext | Ext.Toolbar.TextItem | 工具栏文本项 |
菜单组件: |
|
|
xtype | Class | 描述 |
menu | Ext.menu.Menu | 菜单 |
colormenu | Ext.menu.ColorMenu | 颜色选择菜单 |
datemenu | Ext.menu.DateMenu | 日期选择菜单 |
menubaseitem | BaseItem |
|
menucheckitem | Ext.menu.CheckItem | 选项菜单项 |
menuitem | Ext.menu.Item |
|
menuseparator | Ext.menu.Separator | 菜单分隔线 |
menutextitem | Ext.menu.TextItem | 文本菜单项 |
表单及表单域组件: |
|
|
xtype | Class | 描述 |
form | Ext.FormPanel/Ext.form.FormPanel | 表单面板 |
checkbox | Ext.form.Checkbox | 多选框 |
combo | Ext.form.ComboBox | 下拉框 |
datefield | Ext.form.DateField | 日期选择项 |
timefield | Ext.form.TimeField | 时间录入项 |
field | Ext.form.Field | 表单字段 |
fieldset | Ext.form.FieldSet | 表单字段组 |
hidden | Ext.form.Hidden | 表单隐藏域 |
htmleditor | Ext.form.HtmlEditor | HTML 编辑器 |
label | Ext.form.Label | 标签 |
numberfield | Ext.form.NumberField | 数字编辑器 |
radio | Ext.form.Radio | 单选按钮 |
textarea | Ext.form.TextArea | 多行文本框 |
textfield | Ext.form.TextField | 表单文本框 |
trigger | Ext.form.TriggerField | 触发录入项 |
checkboxgroup | Ext.form.CheckboxGroup | 编组的多选框(Since 2.2) |
displayfield | Ext.form.DisplayField | 仅显示,不校验/不被提交的文本框 |
radiogroup | Ext.form.RadioGroup | 编组的单选按钮(Since 2.2) |
图表组件: |
|
|
xtype | Class | 描述 |
chart | Ext.chart.Chart | 图表组件 |
barchart | Ext.chart.BarChart | 柱状图 |
cartsianchart | Ext.chart.CartesianChart |
|
columnchart | Ext.chart.ColumnChart |
|
linechart | Ext.chart.LineChart | 连线图 |
piechart | Ext.chart.PieChart | 扇形图 |
数据集 Store: |
|
|
xtype | Class | 描述 |
arraystore | Ext.data.ArrayStore |
|
directstore | Ext.data.DirectStore |
|
groupingstore | Ext.data.GroupingStore |
|
jsonstore | Ext.data.JsonStore |
|
simplestore | Ext.data.SimpleStore |
|
store | Ext.data.Store |
|
xmlstore | Ext.data.XmlStore |
|
源文档 <http://www.cnblogs.com/xiaosuo/archive/2010/06/18/1759961.html>
Disabled
2012年2月4日
15:05
disabled:true
Alert
2012年2月4日
15:05
Ext.Msg.alert('Failure', 'Failed to load locale file.');
声音
2012年2月4日
10:40
从touch 2.0 那里转来的audio不能工作.media未定义
使用media player control 如果加载好了google tts,需要自己去点开始按钮
使用html5 audio 无法播放跨域的google tts
使用flash + js无法播放跨域的google tts
背景音乐 无法播放跨域:
<bgsound id='bgs' src="http://translate.google.com/translate_tts?tl=zh-cn&q=123" loop="-1">
Menu-toolbaritem
2012年2月1日
20:51
var toolbaritem = new Array();
for(var _i=0,c=oauthSetting.length;_i<c;++_i){
var i = oauthSetting[_i];
if(i.oshare){
toolbaritem.push({
text: getLocaleString('share'),
rtext: i.title,
iconCls:i.iconCls,
});
}
}
{
iconCls: 'feeddetail-rating',
text: getLocaleString('share'),
menu: {
listeners: {
scope: this,
click: this.publishChange
},
items: toolbaritem
}
}
ajax请求
2012年1月21日
10:46
Ext.Ajax.request({
url: '../server3/api/sina/login.php',
disableCaching: true,
success: function(response, option){
if (!response || response.responseText == '') {
} else {
var winlogin = Ext.getCmp('winLogin');
if(winlogin!=null){
winlogin.close();
}
var win = new pk.UrlWindow2();
win.doModal(response.responseText,'login window');
}
}
});
定时器
2012年1月15日
15:23
var ticket = 0;
var task = {
run: function(){
ticket = ticket + 1;
if(ticket>=2){
stuff.destroy();
return false; // no need
}
},
interval: 3000 //3 second
}
var runner = new Ext.util.TaskRunner();
runner.start(task);
Ext.Window中iframe的相关操作
2012年1月14日
11:33
Java代码
- var win = new Ext.Window({
- id:'win',
- width:700,
- height:600,
- modal:true,
- html:"<iframe id='openwin' src='one.jsp' scrolling='auto' style='width:100%;height:100%;margin:0;padding:0'></iframe>",
- renderTo:Ext.getBody(),
- defaults: {
- border:false
- }
- })
ext window中的iframe如何操作父窗口(关闭窗口win)
Java代码
- var win = parent.Ext.getCmp('openwin');
- win.close();
或者
Java代码
- var win = top.Ext.getCmp('openwin');
- win.close();
win 所在父亲窗口中 操作iframe的 one.jsp
one.jsp中的一个文本框
Java代码
- <input id="name" type="text">
Java代码
- document.getElementById("id").value
- //或者
- ext.getDom('name').value();
函数调用:
1、HTML语法:<iframe name="myFrame" src="child.html"></iframe>
2、父窗口调用子窗口:myFrame.window.functionName();
3、子窗品调用父窗口:parent.functionName();
如果函数写在独立的js文件中
js文件:
Java代码
- Ext.namespace('example');
- example = function() {
-
- return {
- say: function() {
- alert("hello!");
- }
- };
- }();
parent.example.say();
简单地说,也就是在子窗口中调用的变量或函数前加个parent.就行
源文档 <http://zhoutianzhe.iteye.com/blog/945641>
Ext定时发送请求
2012年1月14日
11:26
- Ext.Ajax.request({
- url: 'login.php',//执行登录状态检查的程序
- disableCaching: true,//是否禁用缓存,当然要禁用
- timeout: 10000,//最大等待时间,超出则会触发超时
- success: function(response, option){//ajax请求发送成功时执行
- if (!response || response.responseText == '') {
- //返回的内容为空,即服务器停止响应时
- Ext.TaskMgr.stop(task_CheckLoginState);
- Ext.MessageBox.show({
- title: '错误',
- msg: '在检测您的登录状态时发生错误,请稍候再次进行登录。',
- buttons: Ext.Msg.OK,
- icon: Ext.MessageBox.ERROR,
- fn: function(btn, text){
- if (btn == 'ok') {
- showlogin();//显示登录界面
- }
- }
- });
- return;
- } else {
- result = Ext.decode(response.responseText);
- if (result.success == 'true') {//success是ext用来判断访问url是否成功的依据
- if (result.state == 'true') {//state是自定义的返回值,用来标识登录状态是否有效
- return true;
- } else {//登录状态失效
- Ext.TaskMgr.stop(task_CheckLoginState);
- Ext.MessageBox.show({
- title: '登录检测',
- msg: '您已经长时间未操作或已经退出登录,请重新登录。',
- buttons: Ext.Msg.OK,
- icon: Ext.MessageBox.INFO,
- fn: function(btn, text){
- if (btn == 'ok') { showlogin(); } //显示登陆界面
- }
- });
- return false;
- }
- } else {//success的返回结果不是true,这种情况很少发生
- Ext.TaskMgr.stop(task_CheckLoginState);
- Ext.MessageBox.show({
- title: '错误',
- msg: '在检测您的登录状态时发生网络错误,请确认您已经链接网络后再次进行登录。',
- buttons: Ext.Msg.OK,
- icon: Ext.MessageBox.ERROR,
- fn: function(btn, text){
- if (btn == 'ok') { showlogin(); } //显示登陆界面
- }
- });
- }
- }
- },
- failure: function(data){//ajax请求发送失败或超时
- Ext.TaskMgr.stop(task_CheckLoginState);
- }
- });
源文档 <http://quliangjun.iteye.com/blog/945695>
window打开url
2012年1月14日
10:27
Ext.define('pk.UrlWindow', {
doModal:function(url,title){
Ext.require([
'Ext.window.Window'
]);
var win = Ext.create('widget.window', {
height: 300,
width: 400,
title: title?title:'Window',
plain: true,
autoLoad:{url: url, callback:this.initSearch, scope:this,scripts:true}
});
win.show();
},
initSearch:function(){
alert('b');
}
});
给Label添加click事件
2012年1月13日
22:47
ExtJS中Ext.form.Label默认是没有click事件的,但由于项目需要,要求给label添加一些其它的事件,本文提供两种方法对这个class进行扩展,方法如下:
方法1:
Ext.onReady(function() {
var p = new Ext.ux.MyPanel({
renderTo : document.body
});
});
Ext.ux.MyPanel = Ext.extend(Ext.Panel, {
initComponent : function() {
Ext.apply(this, {
width : 200,
height : 200,
items : [{
xtype : 'label',
id : 'mylabel1',
html : 'Label 1',
listeners : {
render : function() {//渲染后添加click事件
Ext.fly(this.el).on('click',
function(e, t) {
// do stuff
alert('Hi');
});
},
scope : this.el
}
}]
});
Ext.ux.MyPanel.superclass.initComponent.call(this);
}
});
方法2:
Ext.onReady(function() {
//在渲染后添加click事件
Ext.form.Label.prototype.afterRender = Ext.form.Label.prototype.afterRender
.createSequence(function() {
this.relayEvents(this.el, ['click']);
});//这一段一定要放在label之前
var tempPanel = new Ext.Panel({
layout : 'fit',
renderTo : document.body,
items : [{
xtype : 'label',
text : 'label click',
listeners : {
'click' : {
fn : function(field) {
alert("Hi");
},
scope : this
}
}
}]
});
});
源文档 <http://crabdave.iteye.com/blog/325974>
动态布局
2012年1月12日
20:51
Ext.require([
'Ext.window.Window',
'Ext.tab.*',
'Ext.toolbar.Spacer',
'Ext.layout.container.Card',
'Ext.layout.container.Border'
]);
Ext.onReady(function(){
Ext.define('FeedCatalog', {
extend: 'Ext.data.Model',
fields: ['id', 'text']
});
var win2 = Ext.create('widget.window', {
height: 600,
width: 800,
x: 0,
y: 0,
title: 'Constraining Window, plain: true',
plain: true,
layout: {
type: 'table',
columns: 4
}
});
win2.show();
var btns = new Array(),btn;
for(var i=1;i<10;++i){
btn = new Ext.Button({
width:100,
text:'some text',
scale: 'large',
iconCls: 'add',
iconAlign: 'top',
handler: function(){
}
});
btns.push(btn);
}
win2.items.addAll(btns);
win2.doLayout();
});
重画
2012年1月12日
20:51
win2.doLayout();
JavaScript
2012年1月6日
22:00
eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。
源文档 <http://www.w3school.com.cn/js/jsref_eval.asp>
td不换行
2012年4月3日
15:23
1、给<table>加上style="table-layout:fixed";
2、给<td>加上style="width:100px;text-overflow:ellipsis; word-break:keep-all; overflow:hidden;"
js生成TABLE cell的时候,cell里文字过多的时候似乎以上方法也不太好用。可以直接这样:
cell.innerHTML="<nobar>"+"文字"+"</nobar>";
强制不换行。
源文档 <http://www.warting.com/column/24470.html>
使用JS+CSS实现文章列表自动收缩和展开
2012年4月3日
15:15
<head>
<title>CSS可伸缩展开的文章列表 站长学院www.pigzz.com</title>
<meta http-equiv="content-Type" content="text/html;charset=gb2312">
<style type="text/css">
#menu{overflow:hidden;width:198px;height:100%;overflow:hidden}
#menu ul{margin:0;padding:0}
#menu li{list-style-type:none;display:block;width:198px}
#menu li a{display:block;text-decoration:none;width:100%;line-height:20px}
#menu li a span{display:none;color:#999;font-size:12px;border-bottom:1px dashed #EEE;width:198px;margin:0;padding:0}
#menu li a:hover{background:#FFF}
#menu li:hover span, #menu li a:hover span{display:block;cursor:pointer}
#menu h1{margin:0;color:#F60;font-size:12px;padding:0}
#menu li span img{float:left;margin:3px 5px 0 0;border:1px solid #EEE}
</style>
</head>
<body>
<ul id="menu">
<li><a href="/soft/3775.shtml" target="_blank"><h1>《Java夜未眠·程序员的心声》</h1><span>《Java夜未眠·程序员的心声》是一位知名JAVA程序员近年来在网上发表精华文章、技术心得、生活杂感的全集,感谢作者无私的奉献。</span></a></li>
<li><a href="/soft/1730.shtml" target="_blank"><h1>《Java P2P技术内幕》PDF</h1><span>主要是讲解JAVA中P2P技术,这包括此技术的基本概念、应用实例等。如果你是为JAVA专业程序员,那么这本书你理解起来毫不费劲,但如果你没有JAVA基础的话,可能阅读起来有一定困难。</span></a></li>
<li><a href="/soft/1105.shtml" target="_blank"><h1>《深入浅出Struts 2》中文版</h1><span>这本书将带你一起探讨Struts 2应用的方方面面,如架构、配置、实现Actions和对验证与国际化的支持等。除了这些,本书还专注于实践,用大量的代码和技巧教你如何快速使用Struts 2。</span></a></li>
<li><a href="/soft/2011.shtml" target="_blank"><h1>JDK 1.5 API 中文文档</h1><span>JDK 1.5 API的中文文档,最新版本的,HTML格式,可以方便导入到你的开发环境中,更利于你查询资料。</span></a></li>
</ul>
<script type="text/javascript">
<!--
window.onload=function(){var s=document.getElementById('menu').getElementsByTagName('span');s[0].style.display='block';for(var a=0;a<s.length;a++){s[a].parentNode.onmousemove=function(){for(var b=0;b<s.length;b++){if(s[b].parentNode != this) s[b].style.display='none';else s[b].style.display='block';}};}};
-->
</script>
</body>
</html>
最底层
2012年4月2日
23:16
Html:
<div id="sb_foot">
<ul id="sw_footL">
<li><span>Copyright 2012 All rights reserved by pksoftlab.com</span> | </li>
<li><a href="http://blog.pkrss.com">pkrss_web</a> | </li>
<li><a href="http://blog.pkrss.com/discuz/">论坛</a> | </li>
<li><a href="http://blog.pkrss.com/wordpress/">博客</a> | </li>
</ul>
</div>
Css:
#sb_foot ul {
list-style: none;
}
#sb_foot ul li {
text-align: -webkit-match-parent;
display: inline;
}
#sw_footL, #sw_footL a {
color: #737373;
}
Trycatch
2012年3月7日
22:51
try
{
//在此运行代码
}
catch(err)
{
//在此处理错误
}
Array
2012年3月4日
19:49
数组的定义:
方法1.
var mycars=new Array()
mycars[0]="Saab"
mycars[1]="Volvo"
mycars[2]="BMW"
方法2.
定义和初始化一起:
var mycars=new Array("Saab","Volvo","BMW")
或者:
var mycars=["Saab","Volvo","BMW"];
javascript二维数组,用一维数组来模拟:
方法1.
var arr = new Array(['a','b','c'],['d','e','f']);
arr[0]返回第一个一维数组,arr[0][0]返回第一个一维数组的第一个元素'a',下同。
方法2.
arr=new Array();
for(i=0;i<100;i++) {
arr[i]=new Array(...);
}
方法3.
var arr=new Array(
new Array(),
new Array(),
new Array()
);
javascript的数组不需要设定长度,会自己进行扩展,数组名.length返回元素个数
常用函数:
数组常用函数
toString():把数组转换成一个字符串
toLocaleString():把数组转换成一个字符串
join():把数组转换成一个用符号连接的字符串
shift():将数组头部的一个元素移出
unshift():在数组的头部插入一个元素
pop():从数组尾部删除一个元素
push():把一个元素添加到数组的尾部
concat():给数组添加元素
slice():返回数组的部分
reverse():将数组反向排序
sort():对数组进行排序操作
splice():插入、删除或者替换一个数组元素
javascript 数组排序:
arrayobj.sort(sortfunction)
参数
arrayObj
数组
sortFunction
可选项。比较函数。如果这个参数被省略,那么元素将按照 ASCII 字符顺序进行升序排列。
比较函数必须返回下列值之一:
* 负值,如果所传递的第一个参数比第二个参数小。
* 零,如果两个参数相等。
* 正值,如果第一个参数比第二个参数大
举例:
var testArray=[1,5,2,3,6,4]
testArray.sort(function(a,b){return a-b;});
alert(testArray);
源文档 <http://bjtime.cn/info/view.asp?id=177>
for(var key in json[i]){ alert(key+':'+json[i][key]); } }
avascript:通过下面的例子大家就能了解了
在javascript中,for in能够遍历对象
var a=[12,25,3,234];
for(s in a)
alert(a[s]);//这样能遍历出数组元素
for(s in window)
alert(s);//遍历window
源文档 <http://hi.baidu.com/wangmei58/blog/item/4a3c131b9a902f1a8618bf90.html>
Iframe
2012年2月26日
10:22
Firefox facebook plugin toolbar.js
<iframe id="facebook-like-iframe" src="about:blank" type="content"
height="20" flex="1" collapsed="true" />
document.getElementById("facebook-like-iframe").addEventListener("DOMContentLoaded", facebook.onLikeIframeLoad, true);
document.getElementById("facebook-like-iframe").removeEventListener("DOMContentLoaded", facebook.onLikeIframeLoad, true);
fbLib.setAttributeById('facebook-like-iframe', 'collapsed', 'true');
fbLib.setAttributeById('facebook-like-iframe', 'src', 'about:blank');
fbLib.setAttributeById('facebook-like-iframe', 'src',
//document.getElementById('facebook-like-iframe').addProgressListener(facebook.likeProgListener);
//document.getElementById('facebook-like-iframe').contentDocument.addProgressListener(facebook.likeProgListener);
document.getElementById("facebook-like-iframe").setAttribute("collapsed", "true");
var x = document.getElementById("facebook-like-iframe");
var y = x.contentDocument;
var iframewidth = y.getElementsByClassName('connect_widget_interactive_area')[0].offsetWidth;
if (iframewidth == 0)
return;
x.setAttribute("style", "width: " + (iframewidth+1) + "px !important;");
x.setAttribute("collapsed", "false");
!
2012年2月16日
22:53
!null => true
Cookie
2012年2月5日
20:09
支持utf8
Php: urlencode()
Js:decodeURIComponent()
全球化插件
2012年2月2日
15:49
jQuery Globalization
源文档 <http://news.cnblogs.com/n/78159/>
页面跳转
2012年1月21日
8:56
window.location.href='url';
创建类/对象的几种方式
2011年12月29日
20:35
Posted on 2009-03-17 09:37 LucasYang
阅读(2824) 评论(2)编辑
收藏
在JS中,创建对象(Create Object)并不完全是我们时常说的创建类对象,JS中的对象强调的是一种复合类型,JS中创建对象及对对象的访问是极其灵活的。
JS对象是一种复合类型,它允许你通过变量名存储和访问,换一种思路,对象是一个无序的属性集合,集合中的每一项都由名称和值组成(听起来是不是很像我们常听说的HASH表、字典、健/值对?),而其中的值类型可能是内置类型(如number,string),也可能是对象。
一、由一对大括号括起来
var emptyObj = {};
var myObj =
{
'id': 1, //属性名用引号括起来,属性间由逗号隔开
'name': 'myName'
};
//var m = new myObj(); //不支持
不知你注意到对象都是用 var 声明的没有,像上面的代码,就只是简单的声明一个对象,它只有一份拷贝,你不能像实例化类对象一样对它采用new操作,像上面代码的注释部分。这样就极大的限制了对象的重用,除非你建立的对象只需要一份拷贝,否则考虑用其他方法建立对象。
下面一起看看如何访问对象的属性和方法。
var myObj =
{
'id': 1,
'fun': function() {
document.writeln(this.id + '-' + this.name);//以"对象.属性"方式访问
},
'name': 'myObj',
'fun1': function() {
document.writeln(this['id'] + '+' + this['name']);//以集合方式访问
}
};
myObj.fun();
myObj.fun1();
// 结果
// 1-myObj 1+myObj
二、用 function 关键字模拟 class
在 function 中用 this 引用当前对象,通过对属性的赋值来声明属性。如果用var声明变量,则该变量为局部变量,只允许在类定义中调用。
function myClass() {
this.id = 5;
this.name = 'myclass';
this.getName = function() {
return
this.name;
}
}
var my = new myClass();
alert(my.id);
alert(my.getName());
// 结果
// 5
// myclass
三、在函数体中创建一个对象,声明其属性再返回
在函数体中创建对象可利用第一点的方法,或先 new Object(); 再为各属性赋值。
不过用这种方式创建的对象在VS2008 SP1中是没有智能提示的。
function myClass() {
var obj =
{
'id':2,
'name':'myclass'
};
return obj;
}
function _myClass() {
var obj = new Object();
obj.id = 1;
obj.name = '_myclass';
return obj;
}
var my = new myClass();
var _my = new _myClass();
alert(my.id);
alert(my.name);
alert(_my.id);
alert(_my.name);
// 结果
// 2
// myclass
// 1
// _myclass
源文档 <http://www.cnblogs.com/lucas/archive/2009/03/17/1411656.html>
JQUERY
2012年1月6日
21:58
1.jQuery
取网页内容:jQuery.get(url, [data], [callback], [type])
取id元素:$("#myDiv");
2.JQuery easyui
jquery easyui的tabs使用时的问题
详细出处参考:http://www.jb51.net/article/22687.htm
Tabs 标签页/选项卡
源文档 <http://www.cnblogs.com/Philoo/archive/2011/09/30/jeasyui_api_tabs.html>
防止离开本页,直接本页打开超链接
2012年4月2日
11:01
$('#example').tabs({
load: function(event, ui) {
$(ui.panel).delegate('a', 'click', function(event) {
$(ui.panel).load(this.href);
event.preventDefault();
});
}
});
源文档 <http://jqueryui.com/demos/tabs/>
chrome下有效,ie9下好像无效:
var clearAttrib=function(){
var oSubWin=window.frames[0];
if(oSubWin&&oSubWin.top&&oSubWin.parent){
oSubWin.parent=null;
oSubWin.top=null;
window.clearInterval(scanWin);
}
}
var scanWin=window.setTimeout(clearAttrib,1);
源文档 <http://topic.csdn.net/u/20081118/12/fcdb8751-f6ad-449d-b367-89266268e937.html>
技术资料
2011年12月28日
20:37
yql查询股票失败: http://developer.yahoo.com/yql/console/
没有yahoo.finance.quotes该表
select * from yahoo.finance.quotes where symbol in ("yahoo")
1.放弃YQL
2.放弃雅虎的csv数据,因为跨域脚本问题
Y.DataSource.Get 这个可以是Get访问,但数据返回需要自己解析NAN等问题
Y.DataSource.Get 可以取到其内容?
jquery有get方法?
easyui有好用的报表,只更新需要的东西?
Y.DataSource.IO 跨域访问不行
3.准备
Yahoo 公司新闻 http://developer.yahoo.com/finance/company.html
4.jquery取网页内容
document.write( "<script language=javascript src=js/tab0_quote_data_yahoo.js> <\/script> ");
var QuoteClass = {
/*! create quote window.
@param _parent :string parent window
@return {oDS:YAHOO.util.DataSource,oDT:YAHOO.widget.DataTable}
*/
'createQuote': function(_parent){
var oem = yahoo_api_oem;
// 修改 contentType 也会变成"option"
$.ajax({ type:"GET",url: oem.default_src0, data:{s:"XOM+EK+JNJ+MSFT",f:"snd1t1l1ohgvwdyr"},cache:false,contentType:"application/octet-stream",dataType: "text",context: $(_parent), processData: false, success: function(data, textStatus){
$(this).innerHTML=data;
},beforeSend:function(XMLHttpRequest) {
// this; // 调用本次AJAX请求时传递的options参数
XMLHttpRequest.setRequestHeader("Method","GET"); // 这句话一定会把method变为"option"
}
});
// $.post(oem.default_src0,{s:"XOM+EK+JNJ+MSFT",f:"snd1t1l1ohgvwdyr"},function(data){
// $(_parent).innerHTML=data;
// },"text");
}
};
下面只能为script,其它全是跨域错误.可是script提示最后少?
var oem = sina_api_oem;
$.get(oem.default_src,function(data){
$(_parent).innerHTML=data;
},"script");
会变成:
明天研究jquery.socket
素材资料
2011年12月26日
21:16
1.UI类
源文档 <http://www.oschina.net/p/sticklr/similar_projects?lang=0&sort=time&p=1>
jQuery制作图表之一--线图(使用插件jquery.jqchart.js)的使用总结之一
源文档 <http://apps.hi.baidu.com/share/detail/7544842>
源文档 <http://www.cnblogs.com/gaoweipeng/archive/2010/04/17/1714458.html>
2.股票走势图类
源文档 <http://www.qianduan.net/6-jquery-chart-the-expansion-of-web-applications.html>
open flash chart
源文档 <http://topic.csdn.net/u/20110507/09/7e417601-5548-4ff6-b729-4653a21598b6.html>
jqPlot 图形报表插件简介及参数详解(jquery)
源文档 <http://wenku.baidu.com/view/a9eb0dfd700abb68a982fbee.html>
Sina open id
2011年12月28日
20:40
sinaSDK: http://open.weibo.com/wiki/index.php/SDK
引用JSSDK JavaScript文件
在页面顶端加入如下代码
<script src=" http://tjs.sjs.sinajs.cn/open/api/js/wb.js?appkey=3168919025" type="text/javascript" charset="utf-8"></script>
源文档 <http://open.weibo.com/wiki/Weibo-JS_V2>
开发过程
2012年1月3日
21:16
功能设计
2012年2月17日
15:44
js Css特效
2012年5月2日
11:50
16 个新鲜的 CSS3 在线教程
源文档 <http://www.oschina.net/news/28438/16-fresh-css3-tutorials?from=20120429>
建首页
2012年4月11日
17:55
滚动模式
2012年4月2日
23:45
第一行为应用程序栏
第二行为新闻类别
中上为新闻table 水平滚动, 1,透视窗或页表窗
中下为滚动新闻上下滚动.
下一为本站说明(可集成进第一行的公告?)
下二友情链接
搜索工具
2012年3月30日
11:49
qt
2012年3月27日
11:11
1.将更新地址修改为pksoftlab
2.将界面集成进pkrss_qt,使用简洁?
考虑将仿恐龙城完成后,再做此界面?
仿恐龙城
2012年3月27日
9:42
1.上方使用此水平向导栏,逐层创建向层.向导使用恐龙城左上角首页样式
预计工时:4小时
2.中间内容窗口使用iframe控制rss的显示.
预计工时4小时
3.底层显示相关corpright信息.
预计工时1小时
此处有css向导示例
修改界面
2012年3月5日
22:19
2012-3-13
1.将主内容显示选中效果,黄背景色改为黄边框色,边框效果可参考左边树形列表
2.将语音朗读功能加入,可以暂时使用html5的audio,其它以后使用1.silverlight oob + 浏览器创建silverlight对象.
- 如何在网页中动态改变样式
源文档 <http://www.alixixi.com/Dev/HTML/css/2007/2007070766733.html>
主题:分享一个实时动态修改测试网站字体的jQuery代码片断
源文档 <http://www.iteye.com/topic/1117479>
动态设置字体大小,写入Cookie
源文档 <http://hi.baidu.com/geovindu/blog/item/04b1d41639a5f512962b4306.html>
Javascript动态创建 style 节点
源文档 <http://www.hackol.com/news/201009160323504754865.shtml>
createStyleSheet: IE无效果, CHROME无该方法 完美解决也无效
仿ff-cooliris.com插件
2012年2月25日
18:09
Silverlight 3d 墙示例: http://silverlike.net/3d-wall/
官网: http://gallery.expression.microsoft.com/Wall3DSL/
Developing 3D Objects in Silverlight
源文档 <http://msdn.microsoft.com/en-us/magazine/hh547098.aspx>
即时显示,非客户名关闭
Html:
<button onclick="tb_show('3D Wall Gallery', 'http://silverlike.net/silverlight/index.php?xap=%2Fwp-content%2Fuploads%2Fxap%2FWall3D.xap&TB_iframe=true&caption=3D+Wall+Gallery&height=400&width=650', false); return false;">Open Demo</button>
Js:
$(document).ready(function(){tb_init('a.thickbox, area.thickbox, input.thickbox');imgLoader=new Image();imgLoader.src=tb_pathToImage});function tb_init(b){$(b).click(function(){var t=this.title||this.name||null;var a=this.href||this.alt;var g=this.rel||false;tb_show(t,a,g);this.blur();return false})}function tb_show(d,f,g){try{if(typeof document.body.style.maxHeight==="undefined"){$("body","html").css({height:"100%",width:"100%"});$("html").css("overflow","hidden");if(document.getElementById("TB_HideSelect")===null){$("body").append("<iframe id='TB_HideSelect'></iframe><div id='TB_overlay'></div><div id='TB_window'></div>");$("#TB_overlay").click(tb_remove)}}else{if(document.getElementById("TB_overlay")===null){$("body").append("<div id='TB_overlay'></div><div id='TB_window'></div>");$("#TB_overlay").click(tb_remove)}}if(tb_detectMacXFF()){$("#TB_overlay").addClass("TB_overlayMacFFBGHack")}else{$("#TB_overlay").addClass("TB_overlayBG")}if(d===null){d=""}$("body").append("<div id='TB_load'><img src='"+imgLoader.src+"' /></div>");$('#TB_load').show();var h;if(f.indexOf("?")!==-1){h=f.substr(0,f.indexOf("?"))}else{h=f}var i=/\.jpg$|\.jpeg$|\.png$|\.gif$|\.bmp$/;var j=h.toLowerCase().match(i);if(j=='.jpg'||j=='.jpeg'||j=='.png'||j=='.gif'||j=='.bmp'){TB_PrevCaption="";TB_PrevURL="";TB_PrevHTML="";TB_NextCaption="";TB_NextURL="";TB_NextHTML="";TB_imageCount="";TB_FoundURL=false;if(g){TB_TempArray=$("a[@rel="+g+"]").get();for(TB_Counter=0;((TB_Counter<TB_TempArray.length)&&(TB_NextHTML===""));TB_Counter++){var k=TB_TempArray[TB_Counter].href.toLowerCase().match(i);if(!(TB_TempArray[TB_Counter].href==f)){if(TB_FoundURL){TB_NextCaption=TB_TempArray[TB_Counter].title;TB_NextURL=TB_TempArray[TB_Counter].href;TB_NextHTML="<span id='TB_next'> <a href='#'>Next ></a></span>"}else{TB_PrevCaption=TB_TempArray[TB_Counter].title;TB_PrevURL=TB_TempArray[TB_Counter].href;TB_PrevHTML="<span id='TB_prev'> <a href='#'>< Prev</a></span>"}}else{TB_FoundURL=true;TB_imageCount="Image "+(TB_Counter+1)+" of "+(TB_TempArray.length)}}}imgPreloader=new Image();imgPreloader.onload=function(){imgPreloader.onload=null;var a=tb_getPageSize();var x=a[0]-150;var y=a[1]-150;var b=imgPreloader.width;var c=imgPreloader.height;if(b>x){c=c*(x/b);b=x;if(c>y){b=b*(y/c);c=y}}else if(c>y){b=b*(y/c);c=y;if(b>x){c=c*(x/b);b=x}}TB_WIDTH=b+30;TB_HEIGHT=c+60;$("#TB_window").append("<a href='' id='TB_ImageOff' title='Close'><img id='TB_Image' src='"+f+"' width='"+b+"' height='"+c+"' alt='"+d+"'/></a>"+"<div id='TB_caption'>"+d+"<div id='TB_secondLine'>"+TB_imageCount+TB_PrevHTML+TB_NextHTML+"</div></div><div id='TB_closeWindow'><a href='#' id='TB_closeWindowButton' title='Close'>close</a> or Esc Key</div>");$("#TB_closeWindowButton").click(tb_remove);if(!(TB_PrevHTML==="")){function goPrev(){if($(document).unbind("click",goPrev)){$(document).unbind("click",goPrev)}$("#TB_window").remove();$("body").append("<div id='TB_window'></div>");tb_show(TB_PrevCaption,TB_PrevURL,g);return false}$("#TB_prev").click(goPrev)}if(!(TB_NextHTML==="")){function goNext(){$("#TB_window").remove();$("body").append("<div id='TB_window'></div>");tb_show(TB_NextCaption,TB_NextURL,g);return false}$("#TB_next").click(goNext)}document.onkeydown=function(e){if(e==null){keycode=event.keyCode}else{keycode=e.which}if(keycode==27){tb_remove()}else if(keycode==190){if(!(TB_NextHTML=="")){document.onkeydown="";goNext()}}else if(keycode==188){if(!(TB_PrevHTML=="")){document.onkeydown="";goPrev()}}};tb_position();$("#TB_load").remove();$("#TB_ImageOff").click(tb_remove);$("#TB_window").css({display:"block"})};imgPreloader.src=f}else{var l=f.replace(/^[^\?]+\??/,'');var m=tb_parseQuery(l);TB_WIDTH=(m['width']*1)+30||630;TB_HEIGHT=(m['height']*1)+40||440;ajaxContentW=TB_WIDTH-30;ajaxContentH=TB_HEIGHT-45;if(f.indexOf('TB_iframe')!=-1){urlNoQuery=f.split('TB_');$("#TB_iframeContent").remove();if(m['modal']!="true"){$("#TB_window").append("<div id='TB_title'><div id='TB_ajaxWindowTitle'>"+d+"</div><div id='TB_closeAjaxWindow'><a href='#' id='TB_closeWindowButton' title='Close'>close</a> or Esc Key</div></div><iframe frameborder='0' hspace='0' src='"+urlNoQuery[0]+"' id='TB_iframeContent' name='TB_iframeContent"+Math.round(Math.random()*1000)+"' onload='tb_showIframe()' style='width:"+(ajaxContentW+29)+"px;height:"+(ajaxContentH+17)+"px;' > </iframe>")}else{$("#TB_overlay").unbind();$("#TB_window").append("<iframe frameborder='0' hspace='0' src='"+urlNoQuery[0]+"' id='TB_iframeContent' name='TB_iframeContent"+Math.round(Math.random()*1000)+"' onload='tb_showIframe()' style='width:"+(ajaxContentW+29)+"px;height:"+(ajaxContentH+17)+"px;'> </iframe>")}}else{if($("#TB_window").css("display")!="block"){if(m['modal']!="true"){$("#TB_window").append("<div id='TB_title'><div id='TB_ajaxWindowTitle'>"+d+"</div><div id='TB_closeAjaxWindow'><a href='#' id='TB_closeWindowButton'>close</a> or Esc Key</div></div><div id='TB_ajaxContent' style='width:"+ajaxContentW+"px;height:"+ajaxContentH+"px'></div>")}else{$("#TB_overlay").unbind();$("#TB_window").append("<div id='TB_ajaxContent' class='TB_modal' style='width:"+ajaxContentW+"px;height:"+ajaxContentH+"px;'></div>")}}else{$("#TB_ajaxContent")[0].style.width=ajaxContentW+"px";$("#TB_ajaxContent")[0].style.height=ajaxContentH+"px";$("#TB_ajaxContent")[0].scrollTop=0;$("#TB_ajaxWindowTitle").html(d)}}$("#TB_closeWindowButton").click(tb_remove);if(f.indexOf('TB_inline')!=-1){$("#TB_ajaxContent").append($('#'+m['inlineId']).children());$("#TB_window").unload(function(){$('#'+m['inlineId']).append($("#TB_ajaxContent").children())});tb_position();$("#TB_load").remove();$("#TB_window").css({display:"block"})}else if(f.indexOf('TB_iframe')!=-1){tb_position();if($.browser.safari){$("#TB_load").remove();$("#TB_window").css({display:"block"})}}else{$("#TB_ajaxContent").load(f+="&random="+(new Date().getTime()),function(){tb_position();$("#TB_load").remove();tb_init("#TB_ajaxContent a.thickbox");$("#TB_window").css({display:"block"})})}}if(!m['modal']){document.onkeyup=function(e){if(e==null){keycode=event.keyCode}else{keycode=e.which}if(keycode==27){tb_remove()}}}}catch(e){}}function tb_showIframe(){$("#TB_load").remove();$("#TB_window").css({display:"block"})}function tb_remove(){$("#TB_imageOff").unbind("click");$("#TB_closeWindowButton").unbind("click");$("#TB_window").fadeOut("fast",function(){$('#TB_window,#TB_overlay,#TB_HideSelect').trigger("unload").unbind().remove()});$("#TB_load").remove();if(typeof document.body.style.maxHeight=="undefined"){$("body","html").css({height:"auto",width:"auto"});$("html").css("overflow","")}document.onkeydown="";document.onkeyup="";return false}function tb_position(){$("#TB_window").css({marginLeft:'-'+parseInt((TB_WIDTH/2),10)+'px',width:TB_WIDTH+'px'});if(!(jQuery.browser.msie&&jQuery.browser.version<7)){$("#TB_window").css({marginTop:'-'+parseInt((TB_HEIGHT/2),10)+'px'})}}function tb_parseQuery(a){var b={};if(!a){return b}var c=a.split(/[;&]/);for(var i=0;i<c.length;i++){var d=c[i].split('=');if(!d||d.length!=2){continue}var e=unescape(d[0]);var f=unescape(d[1]);f=f.replace(/\+/g,' ');b[e]=f}return b}function tb_getPageSize(){var a=document.documentElement;var w=window.innerWidth||self.innerWidth||(a&&a.clientWidth)||document.body.clientWidth;var h=window.innerHeight||self.innerHeight||(a&&a.clientHeight)||document.body.clientHeight;arrayPageSize=[w,h];return arrayPageSize}function tb_detectMacXFF(){var a=navigator.userAgent.toLowerCase();if(a.indexOf('mac')!=-1&&a.indexOf('firefox')!=-1){return true}}
搜索功能
2012年2月17日
22:55
1.在搜索时,将搜索地址当成rss 放入 rsstable,然后把它加到左边源目录中的我的.我的可以有子类别{搜索关键字+自定义源}
2.然后左边默认的指定第一条rsstable,右边会加载它的rssitem,且采用定时查询机制,避免重复查询.
3.注意rssitem的类别,
a.原始rss
b.google feed 查找关键字返回的源
4.2-3废 因为不同时间搜索,因为返回不同结果,且搜索时间间隔时间应该有些长
5.google 搜索时,可以启用https或http选项.
浏览器右键菜单
2012年2月17日
15:44
根据 chrome插件 speek it https://chrome.google.com/webstore/detail/gfjopfpjmkcfgjpogepmdjmcnihfpokn
在ie ff chrome浏览器中,如果用户选择文本,出现右键菜单,pkrss searchit,使用google 源搜索种子查找 选中的文本。
或者可以设计语音功能,在js中判断插件加载后,使用插件播放语音。
创业资料
2012年3月30日
9:23
创业法典
2012年3月30日
9:23
《创业法典》:用流程图告诉你如何创业
很多人都打算或正在创业,但面临着各种各样问题,寻寻觅觅寻不着靠谱的建议。Duck Duck Go 创始人、天使投资人 Gabriel Weinberg 用一张流程图来介绍创业的整个过程,简单明了,一目了然。好的话别忘了转给你的好友看看。
除非注明,本站文章均为原创或编译,转载请注明:
文章来自36氪
1 comment:
I
was wondering if you ever thought of chaging the structure of
your site? Its very well written; I love
what youve got
to say. Butt maybe you could a little more in the wayy of content so people could
connect
with it better. Youve got an awful lot of text
for only having 1 or 2 images. Maybe you could space it out better?
Post a Comment