如何从任何打开的浏览器中的任何选项卡获取URL

时间:2008-10-15 22:29:58

标签: c# sharepoint url

我正在尝试检测用户正在查看的sharepoint中的哪个网站。一种方法是从浏览器中读取URls并尝试将它们与sharepoint解决方案的参考URL进行比较。我还没有找到任何适用于IE和Firefox的解决方案。

我们的想法是编写一个小型C#应用程序来收集URL并进行比较。

TIA

4 个答案:

答案 0 :(得分:2)

可以使用Win32 API函数FindWindow以非常容易破解的方式执行此操作。

以下C ++示例,它查找Windows Calculator的运行实例并获取其中的edit字段的值。你应该可以在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工具Spy ++检查浏览器窗口的运行实例。对不起,我手边没有Web浏览器的代码示例,但应该可以。请注意,您的解决方案将特定于Windows操作系统,并且在未来版本的Web浏览器中更改UI体系结构可能会导致您的解决方案停止工作。

使用此方法将URL从地址栏中提取出来显然只适用于当前选项卡。我无法看到这对所有选项卡有什么用,除非你做了一些非常棘手的事情,比如模拟用户输入来循环选项卡。这将是非常具有侵入性的,并且用户可以通过使用自己的输入来中断它来轻松搞乱您的应用程序,但如果您正在编写无人值守的内容(如自动测试脚本),它可能会起作用。如果是这种情况,您可能需要查看其他工具,例如AutoIt

这个建议全部都是从我曾写过的blog post转述的。祝你好运!

答案 1 :(得分:2)

在IE中使用Javascript中的ActiveX shell应用程序对象相当容易。以下是示例代码:

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中找到一种方法。

答案 2 :(得分:1)

你不太可能找到这样的答案。所有现代浏览器都限制JavaScript在页面上访问此类信息的能力,因为它会给用户带来如此大的隐私风险。

答案 3 :(得分:0)

在我的脑海中,你可能会考虑使用内置的Firefox语言(不知道它叫什么)。我敢肯定它提供了一种机制来完全按照你所说的做。否则那些为美味等而写的插件将无效。

对于IE,您需要在C ++中执行此操作,或者为此找到一些托管包装器。我不确定如何制作IE插件,但如果你深入挖掘,你应该能找到一些东西。

干杯!