0

ポップアップとして新しいURLを開こうとしています。それはうまくいきます。今、ポップアップからスタイルなどをカスタマイズしようとしています。それはうまくいきません。何が問題なのですか?

例外:「キャッチされていないTypeError:nullのプロパティ'style'を読み取れません」

                <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

documentdocument現在のページ、つまりメインページを指します。document新しく開いたウィンドウのを参照する必要があります。

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

古いjQueryもポップアップにロードすることを意図していると思うので、追加するときも同じ参照が必要になりelement1ます。

また、ポップアップを開くのに時間がかかる場合があります。したがって、ポップアップのすべてのものを別の関数に配置し、その関数を 内で呼び出すか、閉じるタグsetTimeoutの直前にポップアップ自体から呼び出すことをお勧めします。body


編集

div存在しない場合undefinedになります。#ID-navPanelContainerをチェックするstyleundefined、エラーがスローされます。チェックは次のようになります。

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 に答える