2012年1月30日星期一

Windows live javascript login api

< script src="https://js.live.net/v5.0/wl.js" type="text/javascript" >< /script >
< script type="text/javascript" >
WL.init({
client_id: '0000000048082F3A',
redirect_uri: 'http://www.17ball.net/index.asp',
response_type: "token"
});
function msnLogin() {
var session = WL.getSession();
if (session) {
getMsnUser();
}else{
var scopesArr = ["wl.signin wl.emails"];
WL.login({ scope: scopesArr });
} }
WL.Event.subscribe("auth.login", onLogin);
function onLogin() {
var session = WL.getSession();
if (session) {
getMsnUser();
} }
function getMsnUser() {
WL.api("/me", "GET",
function (response) {
if (!response.error) {
userid=response.id; document.msnLoginForm.UserName.value='msn'+userid; document.msnLoginForm.password.value=userid; document.msnLoginForm.RetypePassword.value=userid; document.msnLoginForm.UserEmail.value=response.emails.account; document.msnLoginForm.submit();
}else{
alert("MSN API呼叫發生錯誤請消後再試!" );
} }); }
< /script >

< a href="javascript:msnLogin()" >Msn登入< /a >
< form method="post" name="msnLoginForm" action="authCreateUser.asp" >
< input type="hidden" name="menu" value="AddUserName" >
< input type="hidden" name="ReferrerName" value="" >
< input type="hidden" name="ActivationKey" value="" >
< input type="hidden" name="UserName" size="40" value="" >
< input type="hidden" name="password" size="40" maxLength="16" value="" >
< input type="hidden" name="RetypePassword" size="40" value="" >
< input type="hidden" name="UserEmail" size="40" value="" >
< input type="hidden" name="action" MaxLength="4" size="10" value="msn" >
< /form >

透過DotNetOpenId進行OpenId登入與取得使用者資料

html:
< form id="form1" action="authOpenidlogin.aspx" runat="server" >
< asp:TextBox runat="server" ID="txtOpenId" Width="200" / >
< asp:Button runat="server" ID="btnLogon" Text="Login" OnClick="btnLogon_Click" / >

< script type="text/javascript" >
< !--
idselector_input_id = "txtOpenId";
-- >
< /script >
< /form >

asp.net:1.將下載的DotNetOpenId元件放至web的bin目錄 2.頁面加上下方程式
< script runat="server" >
protected void Page_Load(object sender, EventArgs e){
OpenIdRelyingParty openid = new OpenIdRelyingParty();
if (openid.Response != null) {
switch (openid.Response.Status) {
case AuthenticationStatus.Authenticated:
string email ="";
string userid ="";
long num = 0;
String openidname =openid.Response.ClaimedIdentifier;
if(openidname.IndexOf("myopenid.com")>0){
ClaimsResponse fetch = openid.Response.GetExtension(typeof(ClaimsResponse)) as ClaimsResponse;
if (fetch != null){
email = fetch.Email;
}
}else{
FetchResponse fetch = openid.Response.GetExtension();
if (fetch != null){
email = fetch.GetAttribute(WellKnownAttributes.Contact.Email).Values.Count > 0 ? fetch.GetAttribute(WellKnownAttributes.Contact.Email).Values[0] : null;
}
}
userid = openid.Response.ClaimedIdentifier;

String openidsecret = "17Ball.net" ;
long atime=CurrentTimeMillis();
num = userid.GetHashCode() + atime;
String ftime=atime+"1";
String sig = "openid=" +openidname+ "&ts=" + ftime + openidsecret ;

String signature = GetMD5Hash(sig);

Response.Redirect("http://www.17ball.net/authLogin.asp?openid=" + Server.UrlEncode(openidname) + "&ts=" + ftime + "&sig=" + signature + "&em=" +email + "&num=" + num);

break;
case AuthenticationStatus.Canceled:
break;
case AuthenticationStatus.Failed:
break;
} }
if(Request["login"]=="google"){
txtOpenId.Text = "https://www.google.com/accounts/o8/id";
btnLogon_Click(sender, e);
}else if(Request["login"]=="yahoo"){
txtOpenId.Text = "http://yahoo.com/";
btnLogon_Click(sender, e);
}
}

void btnLogon_Click(object sender, EventArgs e){
OpenIdRelyingParty openid = new OpenIdRelyingParty();
IAuthenticationRequest req = openid.CreateRequest(txtOpenId.Text);
try{
if(txtOpenId.Text.IndexOf("myopenid.com")>0){
ClaimsRequest fetch = new ClaimsRequest();
fetch.Email = DemandLevel.Require;
req.AddExtension(fetch);
}else{
FetchRequest fetch = new FetchRequest();
fetch.AddAttribute(new AttributeRequest(WellKnownAttributes.Contact.Email, true));
req.AddExtension(fetch);
}

req.RedirectToProvider();
}catch (Exception ex){
// result.ErrorMessage = ex.Message;
}
}
< /script >

人因科技平板安裝Android Market

因授權方式不同,故人因科技平板預設無安裝Android Market,
不過這裏提供一些簡單的方法給各位安裝上google market:
1. 如果之前已經有裝過不能用的google market,請先移除
2. 到這裏抓下市場檔案 , http://www.nduoa.com/apk/detail/88043
3. 到這裏抓下RE管理器 , http://www.nduoa.com/apk/detail/78999
2. 將二個檔案copy進產品根目錄內(用平板直接抓者略過本步驟)
3. 安裝附件的rootexplorer(RE管理器)
4. 執行rootexplorer(RE管理器)
5. 將com.android.vending.apk複制到/system/app目錄下
6. 若發現無法貼上,rootexplorer上方有個”掛載為 讀寫”,
點一下,就可以打開寫入功能
7. 貼好後,回到程式集,約10秒內,market就會出現
8. 完成
注意事項:
執行rootexplorer時,它會進到最底層目錄,可能會找不到你copy進去的檔案
那是因為我們通過usb存進去的檔案
其目錄預設為/SDCARD
所以只要進去找即可
而上面提到的/system/app
要從最底層目錄才能進去
同時,為了怕市場又更新
若大家要長久使用
請同時要安裝對岸的安卓或N多..等市場
當google market有更新時
它們也會提供更新檔

2012年1月22日星期日

javascript將文字轉為數字hashcode

如同c# asp.net中的GetHashCode():

function getHashcode(msnid){
var hash = 0;
if (msnid.length == 0) return hash;
for (i = 0; i < msnid.length; i++) {
char = msnid.charCodeAt(i);
hash = ((hash<<5)-hash)+char;
hash = hash & hash; // Convert to 32bit integer
}
return hash;
}

facebook javascript login api

< body >
< div id="fb-root" >< /div >
< script src="//connect.facebook.net/zh_TW/all.js" >< /script >
< script >
FB.init({
appId : '105462332907294', // App ID
channelURL : '//www.17ball.net/channel.html', //channel.html 網址
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
oauth : true, // enable OAuth 2.0
xfbml : true // parse XFBML
});
function facebookLogin() {
// 判斷是否已經有FB的login session 如果以登入 可以跳過登入的步驟進行下一步
FB.getLoginStatus(function (response) {
if (response.authResponse) {
getFacebookUser();
} else {
FB.login(function (response) {
if (response.authResponse) {
getFacebookUser();
} else {
//alert('!authResponse');
}
}, {
scope: 'email'
});
}
});
}
function getFacebookUser(){

FB.api('/me', function(user) {
if (user) {
document.form.UserName.value=user.first_name+'_facebook';
document.form.password.value=user.id;
document.form.RetypePassword.value=user.id;
document.form.UserEmail.value=user.email;
//alert(':'+document.form.UserName.value+':');
document.facebookLoginForm.submit();
}
});
}

< a href="javascript:facebookLogin()" >< img src="images/facebooklogin.gif" align="absmiddle" border="0" / >< /a >
< form method="post" name="facebookLoginForm" action="CreateUser.asp" >
< input type="hidden" name="menu" value="AddUserName" >
< input type="hidden" name="ReferrerName" value="" >
< input type="hidden" name="ActivationKey" value="" >
< input type="hidden" name="UserName" size="40" value="" >
< input type="hidden" name="password" size="40" maxLength="16" value="" >
< input type="hidden" name="RetypePassword" size="40" value="" >
< input type="hidden" name="UserEmail" size="40" value="" >
< input type="hidden" name="action" MaxLength="4" size="10" value="facebook" >
< /form >
< /body >

2012年1月15日星期日

透過Eclipse產生javadoc

選單project -> Generate JavaDoc

若中文註解有問題

應將javadoc 指令行指定產生的 html 頁面為 utf-8 編碼

在配置javadoc引數視窗加入:

-encoding utf-8 -charset utf-8

2012年1月5日星期四

Javascript除法自動進位問題

可透過先各乘以10000再除的方式便可避免進位
如下:
< script >
var t2=((78890*100000/30*100000)*13.5)/10000000000;
alert('t2:'+t2);
< /script >