2008-10-15 11 views
2

我正在嘗試檢測用戶正在查看的SharePoint中的哪個網頁。一種方法可能是從瀏覽器讀取URls,並嘗試將它們與參考網址比較以獲取Sharepoint解決方案。我還沒有找到可以在IE和Firefox中使用的解決方案。如何從任何打開的瀏覽器中的任何選項卡獲取URL

這個想法是編寫一個小的C#應用​​程序,將收穫的URL和做比較。

TIA

+0

您應該提到,你想從如C#外部應用程序做到這一點,如果使用C#是一個要求,你一定要標記的問題爲C#。 – Parappa 2008-10-15 23:06:51

回答

2

有可能在一個非常哈克而且容易做到這一點使用Win32 API函數FindWindow函數破損的方式。

以下C++的例子,發現窗口計算器的運行實例,並得到在它的編輯字段的值。你應該可以在C#中做類似的事情。免責聲明:我沒有真正檢查過,以確保此代碼編譯,對不起。 :)

float GetCalcResult(void) 
{ 
    float retval = 0.0f; 

    HWND calc= FindWindow("SciCalc", "Calculator"); 
    if (calc == NULL) { 
     calc= FindWindow("Calc", "Calculator"); 
    } 
    if (calc == NULL) { 
     MessageBox(NULL, "calculator not found", "Error", MB_OK); 
     return 0.0f; 
    } 
    HWND calcEdit = FindWindowEx(calc, 0, "Edit", NULL); 
    if (calcEdit == NULL) { 
     MessageBox(NULL, "error finding calc edit box", "Error", MB_OK); 
     return 0.0f; 
    } 

    long len = SendMessage(calcEdit, WM_GETTEXTLENGTH, 0, 0) + 1; 
    char* temp = (char*) malloc(len); 
    SendMessage(calcEdit, WM_GETTEXT, len, (LPARAM) temp); 
    retval = atof(temp); 
    free(temp); 

    return retval; 
} 

爲了找出正確的參數在FindWindow函數和FindWindowEx使用,使用Visual Studio工具間諜++檢查你的瀏覽器窗口的運行實例。對不起,我手邊沒有網頁瀏覽器的代碼示例,但應該可以。請注意,您的解決方案將特定於Windows操作系統,並且在未來版本的Web瀏覽器中更改UI架構可能會導致您的解決方案停止工作。

使用此方法從地址欄中提取URL顯然只適用於當前選項卡。我看不出這對所有選項卡都有效,除非您做了一些非常棘手的問題,例如模擬用戶輸入來循環顯示選項卡。這會非常干擾用戶,通過用自己的輸入來中斷應用程序,用戶可以輕鬆搞定你的應用程序,但是如果你正在編寫一些無人照管的東西,比如自動化測試腳本,它可能會工作。如果是這種情況,您可能需要查看AutoIt等其他工具。

此建議所有從blog post我曾經寫過轉述。祝你好運!

1

你不可能找到這樣的答案。所有現代瀏覽器都會限制JavaScript在頁面上訪問此類信息的能力,因爲它會給用戶帶來如此大的隱私風險。

0

剛剛送走我的頭頂,你可能會考慮使用內置Firefox的語言(不知道它叫什麼)。我相信它提供了一種機制來確切地說明你在說什麼。否則,那些爲美味等寫的插件將無法使用。

至於IE,你將需要可以做它在C++或者找一些這方面的託管包裝。我不知道如何製作一個IE插件,但如果你深入挖掘,你應該能夠找到一些東西。

乾杯!

2

在Javascript中使用ActiveX shell應用程序對象的IE相當容易。下面是示例代碼:

function GetURL() 
{ 
var oShell = new ActiveXObject('shell.application'); 
var oColl = oShell.Windows(); 
for (var i = 0;i<oColl.count;i++) 
{ 
    try 
    { 
    var Title = oColl(i).document.title; 
    if (Title.indexOf('DesiredTitle') != -1) 
    { 
    alert ('Title-'+oColl(i).document.title); 
    alert ('Location-'+oColl(i).location); 
    } 
    } 
    catch (err) 
    { 
    alert (err); 
    } 
} 
} 

我仍然試圖找出一種方式在Firefox。

相關問題