RadTabStrip + RadAjaxPanel + Master Page + AddThis in Firefox

4 posts, 0 answers
  1. Boris
    Boris avatar
    11 posts
    Member since:
    Jun 2009

    Posted 03 Aug 2010 Link to this post

    I have a Master Page that is a child of another master page. The child master page has a RadTabStrip and RadMultiPage with a RadAjaxPanel to load tabs dynamically. The parent master page has an AddThis widget. For some reason, in Firefox (and only in Firefox), when I click on a tab for the first time, it loads fine, but with the following error:
    Error: uncaught exception: [Exception... "Security error"  code: "1000" nsresult: "0x805303e8 (NS_ERROR_DOM_SECURITY_ERR)"  location: "http://devweb.tmforum.org/community/ScriptResource.axd?d=k49SRXxqYWiQi1h5ak56cz6yVdfy-wma__9J5UH8u6pGwBj_haSG64G2I9bxGyRx0&t=633767702680000000 Line: 498"]

    When I then click on a different tab nothing happens. If I remove the AddThis widget it works fine.

    Also, on a simple aspx page, no master page with the same setup and the AddThis widget directly after the close of the RadAjaxPanel, there are no problems. 

    Can anyone shine any light on this?

    Thanks,
    Boris Zakharin
  2. Maria Ilieva
    Admin
    Maria Ilieva avatar
    4017 posts

    Posted 06 Aug 2010 Link to this post

    Hi Boris,

    From the provided explanation I;m not able to isolate the cause oft he error you are facing. Could you please post some code from the problematic page so we could further research on it. Also if it is convenient for you please open a regular support ticket and send us sample runnable application which demonstrates the problem. This will give us the option to debug it locally and advise you further.


    Regards,
    Maria Ilieva
    the Telerik team
    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
  3. Boris
    Boris avatar
    11 posts
    Member since:
    Jun 2009

    Posted 06 Aug 2010 Link to this post

    master.Master the main master page:
    <%@ Master Language="C#" AutoEventWireup="true" %>
    ...
    <%@ Import Namespace="CommunityServer" %>
    <%@ Import Namespace="CommunityServer.Components" %>
    <%@ Import Namespace="System.Data" %>
    <%@ Import Namespace="System.Data.SqlClient" %>
    <%@ Import Namespace="System.Web.UI" %>
     
    <script runat="server" language="C#">
    ...
        private static readonly Regex REGEX_BETWEEN_TAGS = new Regex(@">\s+<", RegexOptions.Compiled);
        private static readonly Regex REGEX_LINE_BREAKS = new Regex(@"\n\s+", RegexOptions.Compiled);
     
     
        /// <summary>
        /// Initializes the <see cref="T:System.Web.UI.HtmlTextWriter"></see> object and calls on the child
        /// controls of the <see cref="T:System.Web.UI.Page"></see> to render.
        /// </summary>
        /// <param name="writer">The <see cref="T:System.Web.UI.HtmlTextWriter"></see> that receives the page content.</param>
        protected override void Render(HtmlTextWriter writer)
        {
            using (HtmlTextWriter htmlwriter = new HtmlTextWriter(new System.IO.StringWriter()))
            {
                base.Render(htmlwriter);
                string html = htmlwriter.InnerWriter.ToString();
                html = REGEX_BETWEEN_TAGS.Replace(html, "> <");
                html = REGEX_LINE_BREAKS.Replace(html, "\n");
                writer.Write(html.Trim());
            }
        }
    ...
    </script>
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
        <head runat="server">
        <meta http-equiv="X-UA-Compatible" content="IE=7" />
        <CSControl:Head runat="Server" >
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    ...
            <asp:ContentPlaceHolder runat="server" id="HeaderRegion" />
        </CSControl:Head>
        <CSControl:Script ID="script2" runat="server" Visible="true" Src="~/themes/tmforum/jquery/jquery.js" />
    ...
        </head>
        <body id="b" runat="server">
            <form runat="server">
            <asp:ScriptManager id="oSM" runat="server" />
     
            <table style="width:100%;" cellpadding="0" cellspacing="0"><tr><td align="center">
            <table style="width:1000px;" cellpadding="0" cellspacing="0"><tr><td>
    <table style="text-align:left;" cellpadding="0" cellspacing="0"><tr><td>
    ...
                    <div id="CommonSidebarRight">
                        <asp:ContentPlaceHolder id="rcr" runat="server" />
                    </div>
                <div>
    ...
                     <div style="clear:both"></div>
            
            <table cellspacing="0" cellpadding="0" width="100%" >
        <tr>
                    <td align="center" class="menusmall" style="height: 20px;" nowrap> <!-- AddThis Button BEGIN -->
                        <script type="text/javascript">
    addthis_pub  = 'jphillips_tmforum';
    addthis_logo_background = 'EFEFFF';
    addthis_logo_color      = '666699';
    addthis_brand           = 'TMForum.org';
    addthis_options         = 'favorites, digg, delicious, myspace, facebook, google, live, more';
                        </script>
     
                     <p><a href="http://www.addthis.com/bookmark.php" onmouseover="return addthis_open(this, '', '[URL]', '[TITLE]')"
                                onmouseout="addthis_close()" onclick="return addthis_sendto()">
                                <img src="http://s7.addthis.com/button1-share.gif" width="125" height="16" border="0"
                                    alt="" /></a><script type="text/javascript" src="http://s7.addthis.com/js/152/addthis_widget.js"></script></p>
                         
                        <!-- AddThis Button END -->
                        </td>
                </tr>
    ...
    </table>
    ...
    </td>
    </tr></table>
            </form>
    ...
        </body>
    </html>
    The master page with the tabstrip (homepage.Master):
    <%@ Master Language="C#" AutoEventWireup="true" MasterPageFile="master.Master" %>
    <%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %>
     
    ...
     
    <script runat="server" type="text/C#">
    ...   
        public RadTabStrip RtsHome {
            get
            {
                return rtsHome;
            }
        }
         
        void Page_Load()
        {
            int userID = CommunityServer.Components.CSContext.Current.User.UserID;
     
            loginDate = GetPrevLoginDate(userID);
     
            for (int ctr = 0; ctr < rtsHome.Tabs.Count; ++ctr)
                rtsHome.Tabs[ctr].NavigateUrl = ConfigurationManager.AppSettings["CSBaseHref"] + "default.aspx?tab=" + ctr.ToString();      
            rtsHome.DataBind();
             
            if (!IsPostBack)
            {
                int selectedIndex = 0;
                if (Request["tab"] != null)
                    selectedIndex = int.Parse(Request["tab"]);
                SelectTab(rtsHome.Tabs[selectedIndex]);
            }
             
        }
    ...
     
        private void rmpHome_PageViewCreated(object sender, RadMultiPageEventArgs e)
        {
            switch (e.PageView.ID)
            {
                case "rpvGroups":
                    wucGroupActivity groups = new wucGroupActivity();
                    groups.ID = "groups";
                    groups.FirstPageView = firstPageView;
                    e.PageView.Controls.Add(groups);
                    break;
                case "rpvInbox":
                    wucInbox inbox = new wucInbox();
                    inbox.ID = "inbox";
                    inbox.FirstPageView = firstPageView;
                    e.PageView.Controls.Add(inbox);
                    break;
                case "rpvConnections":
                    wucConnections conn = new wucConnections();
                    conn.ID = "conn";
                    conn.FirstPageView = firstPageView;
                    e.PageView.Controls.Add(conn);
                    break;
                case "rpvBlogs":
                    wucCombinedBlogControl cbc = new wucCombinedBlogControl();
                    cbc.ID = "CBC";
                    cbc.FirstPageView = firstPageView;
                    e.PageView.Controls.Add(cbc);
                    cbc.ShowSort = false;
                    cbc.BlogControlStyle = wucCombinedBlogControl.ControlStyle.HomePage;
                    cbc.SubscriptionOnly = true;
                    cbc.EnableViewState = true;
                    break;
                default:
                    e.PageView.Controls.Add(new LiteralControl("Error"));
                    break;
            }
        }
     
        protected void rtsHome_TabClick(object sender, RadTabStripEventArgs e)
        {
            SelectTab(e.Tab);
        }
     
        private void SelectTab(RadTab tab)
        {
            if (tab.NavigateUrl == "")
            {
                firstPageView = true;
                RadPageView view = new RadPageView();
                view.ID = tab.PageViewID;
                rmpHome.PageViews.Add(view);
                tab.PageView.Selected = true;
            }
            rtsHome.SelectedIndex = tab.Index;
        }
     
    </script>
     
    <asp:Content ContentPlaceHolderID="HeaderRegion" runat="server" >
    <link rel="stylesheet" type="text/css" href="/include/subModal/subModal.css" />
    <script type="text/javascript" src="/include/subModal/common.js"></script>
    <script type="text/javascript" src="/include/subModal/subModal.js"></script>
    <script type="text/javascript">
    ...
    //Cookie name
    var tabCookieName = "currentTab";
     
    //Variable to hold reference to tabstrip
    var tabstrip;
    function onClientTabLoad(sender) {   
        //Get reference to tabstrip   
        tabstrip = sender;
    }
     
    function onTabSelecting(sender, args)
    {
        if (args.get_tab().get_pageViewID())
        {
            args.get_tab().set_postBack(false);
        }
    }
     
    function saveTabIndex(tabText) {   
        //Call JS function to save cookie name, tab text,
        //and days before cookie should expire   
        setCookie(tabCookieName, tabText, 1);
    }
     
    //Cookie operation helper function
    //Save the value to a cookie and set expiration date
    function setCookie(c_name, value, expiredays) {   
        var exdate = new Date();   
        exdate.setDate(exdate.getDate() + expiredays);   
        document.cookie = c_name + "=" + escape(value) +       
            ((expiredays == null) ? "" : ";expires=" + exdate.toGMTString());
    }
     
    function loadTabIndex(tabstrip) {   
        //If tabstrip reference isn't null
        if (tabstrip != null) {       
            //Get cookie value
            var tabText = getCookie(tabCookieName);       
            var historyLength = getCookie("historyLength");
            //If text from the cookie exists
            if (tabText != "" && tabText != null) {           
                //Set tabstrip selected index
                var tab = tabstrip.findTabByText(tabText);
                //Get tab object
                if (tab != null) {               
                    tab.select(); //Select tab           
                }          
            }   
        }
    }
     
    //pageLoad automatically called by ASPNET AJAX when page ready
    function pageLoad() {   
        //Must do tab strip select here so that 
        //multipage is initialized and updated   
        <%if (IsPostBack) { %>
        loadTabIndex(tabstrip);
        <%} %>
        setCookie("historyLength", window.history.length, 1);
    }
     
    //Cookie helper function
    //Gets a cookie based on supplied name and returns value
    //as a string
    function getCookie(c_name) {   
        try {       
            if (document.cookie.length > 0) {           
                c_start = document.cookie.indexOf(c_name + "=");           
                if (c_start != -1) {               
                    c_start = c_start + c_name.length + 1;               
                    c_end = document.cookie.indexOf(";", c_start);               
                    if (c_end == -1) c_end = document.cookie.length;               
                    return unescape(document.cookie.substring(c_start, c_end));           
                }       
            }   
        } catch (err) { }   
         
        //If there is an error or no cookie
        //return an empty string
        return "";
    }
    function onClientTabSelected(sender, args) {   
        //Persist selected tab text
        var tabText = args.get_tab().get_text();   
        //Save text to a cookie using JavaScript   
        saveTabIndex(tabText);
    }
     
    function onClientTabUnselected(sender, args) {   
        //Persist selected tab text
        var tabText = args.get_tab().get_text();   
        //Save text to a cookie using JavaScript   
        setCookie(tabText, new Date(), 7);
        saveTabIndex(tabText);
    }
     
    </script>
     
        <CSControl:SelectedNavigation Selected="home" runat="Server" />
    </asp:Content>
    ...
    <asp:Content ContentPlaceHolderID="bcr" runat="server"><div class="grey_border">
        <telerik:RadAjaxLoadingPanel ID="loadPnlTabs" runat="server" EnableAjaxSkinRendering="true" Transparency="20" BackColor="#E0E0E0">
            <img alt="Loading..."
                 src='<%=ConfigurationManager.AppSettings["CSBaseHRef"] %>themes/tmforum/images/theme/ajax-loader.gif'
                 style="padding-top:100px"/>
        </telerik:RadAjaxLoadingPanel>
        <telerik:RadAjaxPanel ID="pnlTabs" runat="server" EnableAJAX="true" LoadingPanelID="loadPnlTabs">
        <telerik:RadTabStrip ID="rtsHome" runat="server" MultiPageID="rmpHome" Width="100%"
        OnClientTabSelected="onClientTabSelected" OnClientLoad="onClientTabLoad" Align="Justify"
        OnTabClick="rtsHome_TabClick" OnClientTabSelecting="onTabSelecting"
        OnClientTabUnSelected="onClientTabUnselected" CssClass="HomeTabStrip" Skin="" EnableEmbeddedSkins="false">
            <Tabs>
                <telerik:RadTab runat="server" PageViewID="rpvGroups" Text="Group Activity" CssClass="HomeTabWithFlag" SelectedCssClass="HomeTabWithFlagSelected" />
                <telerik:RadTab runat="server" PageViewID="rpvInbox" Text="Inbox" CssClass="HomeTabWithFlag" SelectedCssClass="HomeTabWithFlagSelected" />
                <telerik:RadTab runat="server" PageViewID="rpvConnections" Text="Connections' Activity" CssClass="HomeTabWithFlag" SelectedCssClass="HomeTabWithFlagSelected" />
                <telerik:RadTab runat="server" PageViewID="rpvBlogs" Text="Latest Blogs" CssClass="HomeTabWithFlag" SelectedCssClass="HomeTabWithFlagSelected" />
            </Tabs>
            <TabTemplate>
                <TMFUserControls:FN runat="server" ID="fnInbox" FlagType='<%# DataBinder.Eval(Container, "Index") %>' TabText='<%# DataBinder.Eval(Container, "Text") %>' HyperLink='<%# DataBinder.Eval(Container, "NavigateUrl") %>' StartDate='<%# loginDate %>' />
            </TabTemplate>
        </telerik:RadTabStrip>
            <telerik:RadMultiPage ID="rmpHome" runat="server" SelectedIndex="0" Width="100%" OnPageViewCreated="rmpHome_PageViewCreated">
            </telerik:RadMultiPage>
        </telerik:RadAjaxPanel>
        <div style="float:left;">
            <asp:ContentPlaceHolder id="bcr" runat="server" />
        </div>
        <div style="float:right;">
            <asp:ContentPlaceHolder id="rcr" runat="server" />
        </div>
        <div style="clear:both;"></div>
        </div>
    </asp:Content>
    ...
    The child page (home.aspx):

    <%@ Page EnableViewState="true" Language="C#" AutoEventWireup="true" Inherits="CommunityServer.Controls.CSThemePage"
        MasterPageFile="homepage.Master" SmartNavigation="true" %>
         
    <%@ Import Namespace="CommunityServer.Components" %>
    <%@ Import Namespace="CommunityServer.Controls" %>
    <%@ Import Namespace="System.IO" %>
    <%@ Import Namespace="System.IO.Compression" %>
     
    <%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %>
     
    <script runat="server" language="C#">
     
        public static class Compressor
        {
     
            public static byte[] Compress(byte[] data)
            {
                MemoryStream output = new MemoryStream();
                GZipStream gzip = new GZipStream(output,
                                  CompressionMode.Compress, true);
                gzip.Write(data, 0, data.Length);
                gzip.Close();
                return output.ToArray();
            }
     
            public static byte[] Decompress(byte[] data)
            {
                MemoryStream input = new MemoryStream();
                input.Write(data, 0, data.Length);
                input.Position = 0;
                GZipStream gzip = new GZipStream(input,
                                  CompressionMode.Decompress, true);
                MemoryStream output = new MemoryStream();
                byte[] buff = new byte[64];
                int read = -1;
                read = gzip.Read(buff, 0, buff.Length);
                while (read > 0)
                {
                    output.Write(buff, 0, read);
                    read = gzip.Read(buff, 0, buff.Length);
                }
                gzip.Close();
                return output.ToArray();
            }
        }
     
        User user = CSContext.Current.User;
     
        protected override object LoadPageStateFromPersistenceMedium()
        {
            String alteredViewState;
            byte[] bytes;
            Object rawViewState;
            LosFormatter fomatter = new LosFormatter();
            this.PageStatePersister.Load();
            alteredViewState = this.PageStatePersister.ViewState.ToString();
            bytes = Convert.FromBase64String(alteredViewState);
            bytes = Compressor.Decompress(bytes);
            rawViewState = fomatter.Deserialize(Convert.ToBase64String(bytes));
            return new Pair(this.PageStatePersister.ControlState, rawViewState);
        }
     
        protected override void SavePageStateToPersistenceMedium(object viewStateIn)
        {
            LosFormatter fomatter = new LosFormatter();
            StringWriter writer = new StringWriter();
            Pair rawPair;
            Object rawViewState;
            String rawViewStateStr;
            String alteredViewState;
            byte[] bytes;
            if (viewStateIn is Pair)
            {
                rawPair = ((Pair)viewStateIn);
                this.PageStatePersister.ControlState = rawPair.First;
                rawViewState = rawPair.Second;
            }
            else
            {
                rawViewState = viewStateIn;
            }
            fomatter.Serialize(writer, rawViewState);
            rawViewStateStr = writer.ToString();
            bytes = Convert.FromBase64String(rawViewStateStr);
            bytes = Compressor.Compress(bytes);
            alteredViewState = Convert.ToBase64String(bytes);
            this.PageStatePersister.ViewState = alteredViewState;
            this.PageStatePersister.Save();
        }
     
    ...
        void Page_Init()
        {
            RadTabStrip rtsHome = (RadTabStrip)((ASP.themes_tmforum_common_homepage_master)Master).RtsHome;
            rtsHome.DataBinding += rtsHome_Load;
        }
     
        protected void rtsHome_Load(object sender, EventArgs e)
        {
            RadTabStrip rtsHome = (RadTabStrip)sender;
            foreach (RadTab tab in rtsHome.Tabs)
                tab.NavigateUrl = "";
        }
     
    </script>
    <asp:Content ContentPlaceHolderID="tr" runat="server">
     
    </asp:Content>
     
                
  4. Maria Ilieva
    Admin
    Maria Ilieva avatar
    4017 posts

    Posted 11 Aug 2010 Link to this post

    Hello Boris,

    I researched on the provided code, however was not able to found anything obvious that may cause the described error. It will be best to open a regular support ticket and send us sample runnable application so we could debug it locally and further investigate on the root cause of the issue.


    Best wishes,
    Maria Ilieva
    the Telerik team
    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
Back to Top