6

JavaScript での簡単なタスクは、新しいウィンドウを開いてその中に書き込むことです。しかし、ID を持つ div である dom 要素を記述する必要があります。

var novoForm = window.open("somform.html", "wFormx", "width=800,height=600,location=no,menubar=no,status=no,titilebar=no,resizable=no,");

私が何かを試すよりも...

var w = novoForm.innerWidth;
var h = novoForm.innerHeight;
novoForm.document.getElementById("monitor").innerHTML = 'Janela: '+w+' x '+h;

オブジェクト「novoForm」が有効かどうかを確認しました。しかし、「モニター」divには何も書かれていません。また、onload イベントを使用してみましたが、成功しませんでした。セキュリティ上の制限があるのか​​ 、それとも何か不足しているのか...

4

3 に答える 3

11

あなたはそれを正しく行いましたがonloadページが新しいウィンドウに読み込まれるまで少し時間がかかるため、必ず使用 (またはポーリング) する必要があります。

完全に機能する例を次に示しますソース

(function() {

  document.getElementById("theButton").onclick = function() {

    var novoForm = window.open("http://jsbin.com/ugucot/1", "wFormx", "width=800,height=600,location=no,menubar=no,status=no,titilebar=no,resizable=no,");
    novoForm.onload = function() {
      var w = novoForm.innerWidth;
      var h = novoForm.innerHeight;
      novoForm.document.getElementById("monitor").innerHTML = 'Janela: '+w+' x '+h;
    };
  };
})();

セキュリティ上の制限があるのか​​ 、それとも何か不足しているのか...

ページが明らかに同じオリジンからロードされているため、表示されている例にはありません。URL が別のオリジンからのものである場合、クロスオリジン スクリプトを禁止するSame Origin Policyに遭遇することになります。document.domain上記のコードを含むウィンドウと読み込まれるウィンドウの両方をdocument.domain同じ値に設定して、プロパティを介してそれを緩和できます。上記のリンクから:

2 つのウィンドウ (またはフレーム) にドメインを同じ値に設定するスクリプトが含まれている場合、これら 2 つのウィンドウの同一オリジン ポリシーは緩和され、各ウィンドウは相互に対話できます。たとえば、orders.example.com と catalog.example.com から読み込まれたドキュメント内の協調スクリプトは、それらの document.domain プロパティを「example.com」に設定する可能性があります。これにより、ドキュメントが同じオリジンを持っているように見え、各ドキュメントが読み取れるようになります。他のプロパティ。

詳細document.domainMDNにあります。両方のドキュメントが共通の親ドメインを共有している場合にのみ機能することに注意しapp1.example.comapp2.example.comください。example.comexample1.comexample2.com

于 2013-04-08T13:37:57.273 に答える
1

または、これは解決策です:

var novoForm = window.open("somform.html", "wFormx", "width=800,height=600,location=no,menubar=no,status=no,titilebar=no,resizable=no,");
var teste = function(){
    var mon = novoForm.document.getElementById("monitor");
    if(typeof(mon)!="undefined"){
        //novoForm.alert("Achei!");
        var h = novoForm.innerHeight;
        var strh = String(h - 40 - 30)+'px';
        novoForm.document.getElementById("pagina").style.height = strh;
        novoForm.document.getElementById("monitor").innerHTML = '<p class="legenda">&copy; NetArts | gustavopi</p>';
        clearInterval(id);
    }
}
var id = setInterval(teste, 100);

これは仕事をします。私にとって「きれいな」解決策ではありませんが、うまくいきます!

于 2013-04-08T18:35:49.207 に答える
-1

新しいウィンドウにロードしようとしている URL によって異なります。@TJはその通りです。また、空のドキュメントをロードしたいだけの場合は、「about:blank」を URL にロードできることにも注意してください。唯一の違いは、実際のドキュメントをロードしていないため、outerWidth を使用することです。

var novoForm = window.open("about:blank", "wFormx", "width=800,height=600,location=no,menubar=no,status=no,titilebar=no,resizable=no,");
var w = novoForm.outerWidth;
var h = novoForm.outerHeight;
novoForm.document.body.innerHTML = 'Janela: '+w+' x '+h;
于 2013-04-08T13:51:52.170 に答える