發文作者:wekon | 十月 24, 2008

How to create a plugin for Internet Explorer Mobile (2)

原本以為,以前有寫過 PC 版的 IE plugin
現在寫 Mobile 版時會容易得多
沒想到還是花了我不少時間
很多東西在 Mobile 版上面會變成不能使用
要找別的方式替代
尤其是針對 Windows Mobile 5, 6 這種特殊環境

試著將 PC 版上面的 code 貼過來
結果雖然沒有 compile error
但是卻一直跑不起來
原因是他在使用 QueryInterface 的時候
都是使用 void pointer,然後再做型別轉換
所以就算這種轉換是錯的
compiler 也沒辦法幫你找出來

這件事一直讓我很煩惱
整整花了一天半的時間,還是搞不定
直到今天中午
才想到,我之前一直用 “IE mobile plugin" 的關鍵字來找
但是看到很多人是稱呼它為 “Pocket IE plugin"
所以改用此方式下去找
果然馬上就有收穫

結果回到源頭
找到原來最早看到的 del.icio.us plugin 有 source code !!
放在此處:http://dalelane.co.uk/page.php?id=39
而且還是完整的 project 檔,還包括了 installer 在裡面
看到後真是令人感動

看了他的 code,才知道的確是 QueryInterface 沒有下對
有了他的 code 之後,就相當順利了
重要片段如下:

HRESULT hr = E_FAIL;
IWebBrowser2 *pDataObj = NULL;
hr = m_pSite->QueryInterface(IID_IWebBrowser2, (void**)&pDataObj);
IDispatch *pIDisp = NULL;
pDataObj->get_Document(&pIDisp);
IPIEHTMLWindow2 *pHTMLWindow;
IPIEHTMLDocument2 *pHTMLDocument;
pIDisp->QueryInterface( __uuidof(IPIEHTMLDocument2), (void**)&pHTMLDocument);
hr = pHTMLDocument->get_parentWindow(&pHTMLWindow);
pHTMLWindow->navigate(L"javascript:void(alert(‘a’));");

我在程式的最後,讓他跑了一段 javascript
證明這段 code 的確可以作用
雖然 Mobile 版上面沒有 execScript 可以用
但是 Pocket Internet Explorer 本來就有支援 javacript
所以還是可以透過 navigate 方式來執行
執行結果如下圖

這真是令人感動的一刻
這不僅代表我可以用 plugin 來執行 javascript
並且可以正常操作 IE browser

到此告一小段落
接下來就是 bookmarklet 的東西了


Responses

  1. 程式就是降有時超麻煩滴
    一個小地方錯就全錯
    所以我當時選大學主修時還好沒選computer science改修3D design&video production
    我只會Html

  2. 是阿,寫程式是很折騰人的事
    但是寫出來後很有成就感😀


發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s

分類

%d 位部落客按了讚: