0

我正在尝试打开一个新的 URL 作为弹出窗口。这样可行。现在我正在尝试从弹出窗口中自定义样式等。那是行不通的。怎么了?

异常:“未捕获的类型错误:无法读取 null 的属性‘样式’”

                <script>
                function startGaLandingpage(url) {
                    params = 'width=' + screen.width;
                    params += ', height=' + screen.height;
                    params += ', top=0, left=0'
                    params += ', fullscreen=yes';
                    var url = 'https://www.google.com/analytics/web/?hl=en&pli=1#realtime/rt-overview/a29259688w55318706p63647373/'
                    landingpage = window.open(url, 'landingpage', params);
                    var landingpagescript = document.createElement('script');
                    landingpagescript.src = 'https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js';
                    landingpagescript.type = 'text/javascript';
                    landingpage.document.getElementsByTagName('head')[0].appendChild(landingpagescript);

                    var div = landingpage.document.getElementById('ID-navPanelContainer').style;
                    if (div)
                        void (div.display = (div.display == 'none') ? 'block' : 'none');
                    var div = landingpage.document.getElementById('ID-headerPanel').style;
                    if (div)
                        void (div.display = (div.display == 'none') ? 'block' : 'none');
                    var div = landingpage.document.getElementById('ID-overviewPanelTrafficSourceValueOrganicTable').style;
                    if (div)
                        void (div.display = (div.display == 'none') ? 'block' : 'none');
                    var div = landingpage.document.getElementById('ID-overviewPanelGeoComponent').style;
                    if (div)
                        void (div.display = (div.display == 'none') ? 'block' : 'none');
                    var div = landingpage.document.getElementById('ID-footerPanel').style;
                    if (div)
                        void (div.display = (div.display == 'none') ? 'block' : 'none');
                    var div = landingpage.document.getElementById('ID-navToggle').style;
                    if (div)
                        void (div.display = (div.display == 'none') ? 'block' : 'none');
                    var div = landingpage.document.getElementById('ID-overtimePanel').style;
                    if (div)
                        void (div.display = (div.display == 'none') ? 'block' : 'none');
                    var div = landingpage.document.getElementById('ID-contextDetailsPanel').style;
                    if (div)
                        void (div.display = (div.display == 'none') ? 'block' : 'none');
                    var div = landingpage.document.getElementById('ID-reportHeader').style;
                    if (div)
                        void (div.display = (div.display == 'none') ? 'block' : 'none');
                    var div = landingpage.document.getElementById('ID-realtimeReportFootnote').style;
                    if (div)
                        void (div.display = (div.display == 'none') ? 'block' : 'none');

                }

            </script>
4

2 回答 2

1

您正在重新声明登录页面:

landingpage = window.open(url, 'landingpage', params);
...
var landingpage = document.createElement('script');

在这种情况下,您不能再在同一函数中使用前一个。这可能只是增加了问题。

我建议将包含脚本标签的新变量重命名为landingpagescript

var landingpagescript = document.createElement('script');
于 2013-02-05T19:39:52.403 回答
0

document指的document是当前页面,即主页面。您需要参考document新打开的窗口的:

var div = landingpage.document.getElementById(...).style;

我想旧的 jQuery 也意味着加载到弹出窗口,所以在附加时你也需要相同的引用element1

也有可能,打开弹出窗口需要一些时间。因此,最好将弹出窗口的所有内容放到一个单独的函数中,并在 内调用该函数,或者更确切地说,在关闭标记setTimeout之前从弹出窗口本身调用该函数。body


编辑

div将是undefined如果#ID-navPanelContainer不存在。检查 astyleundefined引发错误。你的检查应该是这样的:

var div = landingpage.document.getElementById('ID-navPanelContainer');
if (div) {
    void (div.style.display = (div.style.display == 'none') ? 'block' : 'none');
}
于 2013-02-05T17:44:31.407 回答