代码之家  ›  专栏  ›  技术社区  ›  Kasper

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

  •  2
  • Kasper  · 技术社区  · 16 年前

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

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

    短暂性脑缺血发作

    4 回复  |  直到 16 年前
        1
  •  2
  •   Parappa    16 年前

    可以使用Win32 API函数FindWindow以一种非常粗糙且容易破坏的方式来实现这一点。

    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 我曾经写过。祝你好运

        2
  •  2
  •   Sameer    12 年前

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

    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);
      }
     }
    }
    

        3
  •  1
  •   David Arno    16 年前

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

        4
  •  0
  •   chris chris    16 年前

    就在我的脑海里,你可以考虑使用内置的Firefox语言(不知道它叫什么)。我相信它提供了一种机制来精确地执行你所说的。否则,那些为delicious等编写的插件将无法工作。

    至于IE,你需要在C++中做它或者找到一些管理的包装器。我不知道如何制作IE插件,但如果你深入研究,你应该能够找到一些东西。

    干杯