在web page裡的DOM是這樣排列的 window->document->html 接下來就是 head跟body
而且window.open()這個mothod 不只會新開出一個視窗(或是頁面) 更會回傳被開出來的視窗的DOM tree的window物件
也就是如果用 var s=window.open("http://www.example.com/a.html"); 接下就可以用s.document."some object or some method"
去存取那個新開視窗下面的DOM物件
但是 雖說是可以存取 但還是有某些限制 例如same origin policy的問題
若是被開出來的視窗已經換到不同的origin(port domain protocol)去了 那就不能對這個視窗做存取的動作了
還有就是時間的問題 例如想要讀取新開出來的window的url 如果直接這樣寫
var s=window.open("http://www.example.com/a.html");
alert(s.location.href);
這樣會得出 about:blank
我猜想是因為 執行到 alert(s.location.href); 這一行時 http://www.example.com/a.html的DOM tree的資料結構還沒構建好
若是這樣用 setTimeout("alert(s.location.href)", 1*1000); 澤就可以正確顯示出 http://www.example.com/a.html 了
然而 被新開出來的視窗 也可以利用window.opener來取得開出此視窗的視窗的window物件(姑且稱為父視窗)
同樣得 有了window物件 也可以存取自己的父視窗下的DOM物件
當然 上述的情況都要符合same origin policy才行
2008年12月28日 星期日
2008年12月10日 星期三
fedora6下換目錄顏色&vim 註解顏色的方法
用pietty連進fedora core 6的時候 目錄跟vim 註解的顏色是深藍色的
而pietty的背景顏色又是黑色 所以很傷眼睛
不過只要在家目錄下加個設定檔 就可以換顏色了
要換vim的註解顏色 只要在家目錄下加個 .vimrc檔
裡面寫 highlight Comment ctermfg=darkcyan
這樣就可以把註解換成淺藍色
目錄顏色的話 有點複雜
可以參考這裡 http://andrew.sayya.org/blog/?p=65
如上網址所述 虛擬終端機的顏色設定檔是在 /etc/DIR_COLORS.xterm
虛擬主控台的顏色設定檔是在 /etc/DIR_COLORS
如果想要讓不同的使用者調整自己想要的顏色
在家目錄裡加個 .dir_colors檔
然後把/etc/DIR_COLORS裡的內容 copy過來
再把DIR 後面的顏色換成你想要的顏色就可以了
而pietty的背景顏色又是黑色 所以很傷眼睛
不過只要在家目錄下加個設定檔 就可以換顏色了
要換vim的註解顏色 只要在家目錄下加個 .vimrc檔
裡面寫 highlight Comment ctermfg=darkcyan
這樣就可以把註解換成淺藍色
目錄顏色的話 有點複雜
可以參考這裡 http://andrew.sayya.org/blog/?p=65
如上網址所述 虛擬終端機的顏色設定檔是在 /etc/DIR_COLORS.xterm
虛擬主控台的顏色設定檔是在 /etc/DIR_COLORS
如果想要讓不同的使用者調整自己想要的顏色
在家目錄裡加個 .dir_colors檔
然後把/etc/DIR_COLORS裡的內容 copy過來
再把DIR 後面的顏色換成你想要的顏色就可以了
pdf限制列印
下載了一個限制列印的pdf檔案 想了各種方法要把它印出來
包括先轉成word後再印 或是用pdf破解軟體先破解密碼再印
在網路上有找到一個blog介紹pdf破解軟體 Free PDF Tools
http://blog.soft.idv.tw/?p=414
結果我GhostScript不能裝
就在一籌莫展之際 無意之中在檔案上按下右鍵
疑 有個列印的選項 按下去看看
一秒後 身後的印表機動了起來 = =
天阿 這樣就印出來了
冏 無言......
包括先轉成word後再印 或是用pdf破解軟體先破解密碼再印
在網路上有找到一個blog介紹pdf破解軟體 Free PDF Tools
http://blog.soft.idv.tw/?p=414
結果我GhostScript不能裝
就在一籌莫展之際 無意之中在檔案上按下右鍵
疑 有個列印的選項 按下去看看
一秒後 身後的印表機動了起來 = =
天阿 這樣就印出來了
冏 無言......
2008年10月2日 星期四
有關PHP的session
之前用PHP寫會員系統的網頁 有用到session
大家都知道會員系統常常會用到session跟cookie這兩種東西
但是對網頁沒什麼概念的我 一開始對這兩種東西有點搞混了
查找資料後 在這邊把一些經驗跟觀念寫下來(在這邊就不講cookie了 單講session)
首先 當一個PHP程式要使用session時 必須在使用前先呼叫session_start()這個函數
當一個瀏覽器一瀏覽到有呼叫session_start()的網頁時 一個session檔案就會在伺服器中產生了
這個檔案是存在server的硬碟之中 存放的位置依據php.ini中的session.save_path而定
這個部分跟cookie類似 只是cookie是存放在client端的檔案 session是存放在server端
session檔案產生之後 server端的頁面需要使用到的session變數全都會存到這個檔案之中
好了 現在有個問題 一個頁面可能同時被很多人瀏覽 在這種情況下 session檔案也應該要有很多個才對
並且server還必須要知道哪個session檔案是屬於哪個正在瀏覽頁面的使用者擁有的
沒錯 當session檔案產生時 一個可以用來辨別使用者的token也會跟著產生 也就是所謂的session_id
並且session_id會直接寫在session檔的檔名上 例如像這樣:
sess_gge0ci41lnm57npqhp9m7riqn2
這是一個session檔的檔名 sess_後面的就是session_id
==========接下來是我自己的理解 可能有錯誤的地方============
上面說這個session_id可以讓server用來辨認使用者 其實精確一點來說
是用來辨認client端"正在瀏覽網頁的process"
例如同一個使用者 開了兩個ie視窗來瀏覽網頁 這兩個ie是不同process
則server端其實會產生兩個session檔
好 現在來一個瀏覽網頁的流程舉例
1.client端一個瀏覽器瀏覽了呼叫session_start()的網頁 server對這個瀏覽器給出一個session_id
2.根據這個session_id session檔案產生了
3.每當這個瀏覽器要瀏覽server端其他頁面時 都會把session_id也傳給server
server以此去找尋屬於這個瀏覽器的session檔
4.client端把這個瀏覽器關掉了 新開一個瀏覽器繼續瀏覽頁面 但是這個瀏覽器不會把session_id傳給server
5.server沒發現session_id 於是server給出一個新的session_id 然後產生一個新的session檔
回到了1.的流程
=============================================================
接著應該可以知道 session_id是很重要的 而且看完上面 應該可以發現
既然client端的瀏覽器常常要把session_id傳給server 那client端應該要儲存session_id才對
沒錯 若是照php.ini的預設 當server給出一個session_id時 client端瀏覽器就會有一個cookie來儲存session_id
但是也可以不要這樣做 例如修改php.ini中的session.use_trans_sid為1
這個設定是告訴server 若是某個瀏覽器不使用cookie
PHP會自動將這個瀏覽器看到的網頁中的連結後面都加上PHPSESSID=xxxxxxx
這樣一樣可以達到瀏覽器瀏覽頁面時將session_id傳遞給server的功能
不過這個方法並不安全 最好不要使用
大家都知道會員系統常常會用到session跟cookie這兩種東西
但是對網頁沒什麼概念的我 一開始對這兩種東西有點搞混了
查找資料後 在這邊把一些經驗跟觀念寫下來(在這邊就不講cookie了 單講session)
首先 當一個PHP程式要使用session時 必須在使用前先呼叫session_start()這個函數
當一個瀏覽器一瀏覽到有呼叫session_start()的網頁時 一個session檔案就會在伺服器中產生了
這個檔案是存在server的硬碟之中 存放的位置依據php.ini中的session.save_path而定
這個部分跟cookie類似 只是cookie是存放在client端的檔案 session是存放在server端
session檔案產生之後 server端的頁面需要使用到的session變數全都會存到這個檔案之中
好了 現在有個問題 一個頁面可能同時被很多人瀏覽 在這種情況下 session檔案也應該要有很多個才對
並且server還必須要知道哪個session檔案是屬於哪個正在瀏覽頁面的使用者擁有的
沒錯 當session檔案產生時 一個可以用來辨別使用者的token也會跟著產生 也就是所謂的session_id
並且session_id會直接寫在session檔的檔名上 例如像這樣:
sess_gge0ci41lnm57npqhp9m7riqn2
這是一個session檔的檔名 sess_後面的就是session_id
==========接下來是我自己的理解 可能有錯誤的地方============
上面說這個session_id可以讓server用來辨認使用者 其實精確一點來說
是用來辨認client端"正在瀏覽網頁的process"
例如同一個使用者 開了兩個ie視窗來瀏覽網頁 這兩個ie是不同process
則server端其實會產生兩個session檔
好 現在來一個瀏覽網頁的流程舉例
1.client端一個瀏覽器瀏覽了呼叫session_start()的網頁 server對這個瀏覽器給出一個session_id
2.根據這個session_id session檔案產生了
3.每當這個瀏覽器要瀏覽server端其他頁面時 都會把session_id也傳給server
server以此去找尋屬於這個瀏覽器的session檔
4.client端把這個瀏覽器關掉了 新開一個瀏覽器繼續瀏覽頁面 但是這個瀏覽器不會把session_id傳給server
5.server沒發現session_id 於是server給出一個新的session_id 然後產生一個新的session檔
回到了1.的流程
=============================================================
接著應該可以知道 session_id是很重要的 而且看完上面 應該可以發現
既然client端的瀏覽器常常要把session_id傳給server 那client端應該要儲存session_id才對
沒錯 若是照php.ini的預設 當server給出一個session_id時 client端瀏覽器就會有一個cookie來儲存session_id
但是也可以不要這樣做 例如修改php.ini中的session.use_trans_sid為1
這個設定是告訴server 若是某個瀏覽器不使用cookie
PHP會自動將這個瀏覽器看到的網頁中的連結後面都加上PHPSESSID=xxxxxxx
這樣一樣可以達到瀏覽器瀏覽頁面時將session_id傳遞給server的功能
不過這個方法並不安全 最好不要使用
2008年9月16日 星期二
寫了一點php&javascript
用vim寫php跟javascript需要高明的debug功力 這是最近的一點心得
最近寫了需要註冊的網頁 用到一點點php跟javascript 剛開始寫這些scripting language還蠻好玩的
因為入門的門檻其實不高 但是後來debug的時候就難過了 這種不需要事先編譯的語言 只要任何一個地方有點小錯誤
那debug可能就要de到非常難過 像是用javascript寫一個function一個變數寫錯然後整個function就沒有作用了
php也是一些奇怪的小錯誤整隻php程式就不會跑了 也可能是我剛接觸這些所以debug功力不高強
不過有編譯器幫忙find error真的方便多了
雖然有人跟我說用dreamweaver這類的編輯器很方便可以設break point 不過我就是不想用
vim就很好用了阿 簡單乾淨 而且我不想再去學一種軟體 也不喜歡軟體自動加的code
跟本身龜毛也有一點關係 總之還是會繼續用vim寫下去
最近寫了需要註冊的網頁 用到一點點php跟javascript 剛開始寫這些scripting language還蠻好玩的
因為入門的門檻其實不高 但是後來debug的時候就難過了 這種不需要事先編譯的語言 只要任何一個地方有點小錯誤
那debug可能就要de到非常難過 像是用javascript寫一個function一個變數寫錯然後整個function就沒有作用了
php也是一些奇怪的小錯誤整隻php程式就不會跑了 也可能是我剛接觸這些所以debug功力不高強
不過有編譯器幫忙find error真的方便多了
雖然有人跟我說用dreamweaver這類的編輯器很方便可以設break point 不過我就是不想用
vim就很好用了阿 簡單乾淨 而且我不想再去學一種軟體 也不喜歡軟體自動加的code
跟本身龜毛也有一點關係 總之還是會繼續用vim寫下去
訂閱:
文章 (Atom)