我正在嘗試檢測用戶正在查看的SharePoint中的哪個網頁。一種方法可能是從瀏覽器讀取URls,並嘗試將它們與參考網址比較以獲取Sharepoint解決方案。我還沒有找到可以在IE和Firefox中使用的解決方案。如何從任何打開的瀏覽器中的任何選項卡獲取URL
這個想法是編寫一個小的C#應用程序,將收穫的URL和做比較。
TIA
我正在嘗試檢測用戶正在查看的SharePoint中的哪個網頁。一種方法可能是從瀏覽器讀取URls,並嘗試將它們與參考網址比較以獲取Sharepoint解決方案。我還沒有找到可以在IE和Firefox中使用的解決方案。如何從任何打開的瀏覽器中的任何選項卡獲取URL
這個想法是編寫一個小的C#應用程序,將收穫的URL和做比較。
TIA
有可能在一個非常哈克而且容易做到這一點使用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我曾經寫過轉述。祝你好運!
你不可能找到這樣的答案。所有現代瀏覽器都會限制JavaScript在頁面上訪問此類信息的能力,因爲它會給用戶帶來如此大的隱私風險。
剛剛送走我的頭頂,你可能會考慮使用內置Firefox的語言(不知道它叫什麼)。我相信它提供了一種機制來確切地說明你在說什麼。否則,那些爲美味等寫的插件將無法使用。
至於IE,你將需要可以做它在C++或者找一些這方面的託管包裝。我不知道如何製作一個IE插件,但如果你深入挖掘,你應該能夠找到一些東西。
乾杯!
在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。
您應該提到,你想從如C#外部應用程序做到這一點,如果使用C#是一個要求,你一定要標記的問題爲C#。 – Parappa 2008-10-15 23:06:51