【问题标题】:How do I capture parent page's url (utm parameters) in iframe page,如何在 iframe 页面中捕获父页面的 url(utm 参数),
【发布时间】:2014-12-13 18:30:23
【问题描述】:

我在页面加载时使用以下代码,但它给了我以下错误

“对象引用未设置为对象的实例。”

protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {

            if (("" + Request.QueryString["utm_source"] == "") && ("" + Request.QueryString["utm_medium"] == "") || ("" + Request.QueryString["utm_source"] == null) && ("" + Request.QueryString["utm_medium"] == null))
            {
                lblSource.Text = "Direct/Referral";
            }
            else
            {
                try
                {
                    if (Request.UrlReferrer.OriginalString.ToString() != null)
                    {
                        string abc = Request.UrlReferrer.OriginalString.ToString();

                        string[] source = abc.Split('?');
                        string a1 = source[1];

                        a1 = a1.Substring(11);

                        string[] spl = a1.Split('&');

                        utm_source = spl[0];
                        string a2 = spl[1];

                        utm_medium = a2.Substring(11);
                    }
                }
                catch (Exception ex)
                {
                    //Response.Write(ex);
                    lblSource.Text = "Direct/Referral";
                }
            }
            //Response.Write(utm_source + "   " + utm_medium);

                lblSource.Text = utm_source + " " + utm_medium;

        }
    }

【问题讨论】:

    标签: c# asp.net .net iframe utm


    【解决方案1】:

    是的,你做对了,但你需要先检查null,然后再使用它们。以下是一些可以改进的代码。

    使用这个if(Request.UrlReferrer!=null && !string.IsNullOrEmpty(Request.UrlReferrer.OriginalString)) 而不是if (Request.UrlReferrer.OriginalString.ToString() != null)

    使用 Request.QueryString["utm_source"] != null 而不是 Request.QueryString["utm_source"] == "",因为它会尝试将其转换为字符串进行比较,并且该值为 null ,它会报错为 "Object reference not set to an instance of an object."

    要获得准确的查询字符串,您可以从 iFrame 中这样做,而不是字符串操作。

    protected void Page_Load(object sender, EventArgs e)
    {
        Uri parenturl = new Uri(Request.UrlReferrer.OriginalString);
        string qyr = parenturl.Query;
        NameValueCollection col = HttpUtility.ParseQueryString(qyr);
        String kvalue = col["k"];
        String mvalue = col["m"];
    }
    

    假设:以上代码属于test1.aspx,我还有一页test2.aspx,其中iFramesrc = test1.aspx。我使用了http://localhost:52785/test2.aspx?k=1&m=2 url,所以父页面的查询字符串为k=1, m=2。看下面的截图,我得到了什么。

    【讨论】:

    • 亲爱的@Arindam,感谢您的解决方案,但它不起作用。它给了我“对象引用未设置为对象的实例”的错误。
    • 你能告诉我它在哪一行显示错误吗?或者如果你能够调试,那么你可以检查。
    • 嗨 Arindam,这是其他一些愚蠢的错误,否则您的代码非常有用。非常感谢。
    【解决方案2】:

    您可以尝试以下 JavaScript,但前提是 iframe 和周围的网站来自同一个域(同源策略)。

    var uri = document.getElementById("IdOfIframe").contentWindow.location.href;
    

    【讨论】:

    • 嘿丹尼尔,我的问题是站点和 iframe 都在不同的服务器上。 :(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-13
    • 2016-11-15
    • 1970-01-01
    • 2013-09-22
    • 2018-03-31
    • 1970-01-01
    • 2013-07-25
    相关资源
    最近更新 更多