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

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

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

TIA

使用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 。

这个建议都是从我曾经写过的博客文章中解释的。 祝好运!

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

 function GetURL() { var oShell = new ActiveXObject('shell.application'); var oColl = oShell.Windows(); for (var i = 0;i 

我仍然想在firefox中找到一种方法。

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

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

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

干杯!