C# 获取Firefox URL

C# 获取Firefox URL,c#,firefox,C#,Firefox,我需要知道用户当前所在的URL。(使用Firefox) 我想到了一个键盘记录器来跟踪URL,但是当用户点击链接时会发生什么呢 标题不够,我需要完整的URL。 对于IE来说这很容易,但对于Firefox来说就不容易了。 对于IE,我正在使用: private string GetUrlFromIE() { IntPtr windowHandle = GetForegroundWindow(); IntPtr childHandle; String strUrlToReturn = "&q

我需要知道用户当前所在的URL。(使用Firefox)
我想到了一个键盘记录器来跟踪URL,但是当用户点击链接时会发生什么呢

标题不够,我需要完整的URL。
对于IE来说这很容易,但对于Firefox来说就不容易了。
对于IE,我正在使用:

private string GetUrlFromIE()
{
IntPtr windowHandle = GetForegroundWindow();
IntPtr childHandle;
String strUrlToReturn = "";

//IE's toolbar container
childHandle = FindWindowEx(windowHandle,IntPtr.Zero,"WorkerW",IntPtr.Zero);
if(childHandle != IntPtr.Zero)
{
    //get a handle to address bar
    childHandle = FindWindowEx(childHandle,IntPtr.Zero,"ReBarWindow32",IntPtr.Zero);
    if(childHandle != IntPtr.Zero)
    {
        // get a handle to combo boxes
        childHandle = FindWindowEx(childHandle, IntPtr.Zero, "ComboBoxEx32", IntPtr.Zero);
        if(childHandle != IntPtr.Zero)
        {
            // get a handle to combo box
            childHandle = FindWindowEx(childHandle, IntPtr.Zero, "ComboBox", IntPtr.Zero);
            if(childHandle != IntPtr.Zero)
            {
                //get handle to edit
                childHandle = FindWindowEx(childHandle, IntPtr.Zero, "Edit", IntPtr.Zero);
                if (childHandle != IntPtr.Zero)
                {
                    strUrlToReturn = GetText(childHandle);
                }
            }
        }
    }
}
return strUrlToReturn;
}

有什么想法吗?

在javascript中,您可以通过

window.location.href

您可以使用WindowsIAccessible界面获取URL

为了便于操作,我建议使用库。 您应该提前准备好FireFox窗口句柄

以下是从FireFox获取URL的C#代码:

    private static string GetUrlFromFirefox(IntPtr windowHandle)
    {
        SystemAccessibleObject sao = SystemAccessibleObject.FromWindow(new SystemWindow(windowHandle), AccessibleObjectID.OBJID_WINDOW);
        var preds = new Predicate<SystemAccessibleObject>[] { 
            s => s.RoleString == "application",
            s => s.RoleString == "property page",
            s => s.RoleString == "grouping" && s.StateString == "None",
            s => s.RoleString == "property page" && s.StateString == "None",
            s => s.RoleString == "browser",
            s => s.RoleString == "document" && s.Visible
        };

        var current = sao.Children;
        SystemAccessibleObject child = null;
        foreach (var pred in preds)
        {
            child = Array.Find(current, pred);
            if (child != null)
            {
                current = child.Children;
            }
        }

        if (child != null)
        {
            return child.Value;
        }

        return string.Empty;
    }
私有静态字符串GetUrlFromFirefox(IntPtr windowHandle)
{
SystemAccessibleObject sao=SystemAccessibleObject.FromWindow(新系统窗口(windowHandle),AccessibleObject.OBJID_窗口);
var preds=新谓词[]{
s=>s.RoleString==“应用程序”,
s=>s.RoleString==“属性页”,
s=>s.RoleString==“分组”&&s.StateString==“无”,
s=>s.RoleString==“属性页”和&s.StateString==“无”,
s=>s.RoleString==“浏览器”,
s=>s.RoleString==“文档”和s.可见
};
var电流=sao.儿童;
SystemAccessibleObject子对象=null;
foreach(pred中的var pred)
{
child=Array.Find(当前,pred);
if(child!=null)
{
当前=子项。子项;
}
}
if(child!=null)
{
返回子值;
}
返回字符串。空;
}

这适用于FireFox 14。

在IE中,您可以通过获取地址栏的句柄来获取url,然后使用WINAPI getWindowText()可以检索IEs url,但FireFox没有子句柄,至少没有子句柄的getWindowText将返回除此之外的内容0@Dan这个问题被标记为C#(而不是JavaScript)请编辑您的问题,并准确地告诉我们您想做什么,以及您是如何做的。您的问题含糊不清,您的要求也不明确。我们现在才知道您是如何通过评论获取所需信息的。您是否正在使用C#win应用程序从外部web浏览器获取位置?是的,我正在使用C#winforms应用程序并尝试获取当前firefox上的位置。如何在firefox中运行该应用程序而不更改url?只有将url设置为某个值时,它才会更改url。要获取url,您可以:var theUrl=window.location.href;仅当您将其设置为某个窗口时,它才会重定向用户。location=“”;是的,但我如何在firefox中运行该脚本?如果我跑file:///.../script.js 或者类似的东西我会改变网址