2012-02-22 28 views
0

私のサイトから別のウィンドウ(別のドメイン)で要素を照会しようとしています。このようなコードを実行しますjavascriptを使用して、自分のサイトから開いたウィンドウの要素をクエリできますか?

<a href="#" onclick=openOtherWindow();>Click me</a> 

function openOtherWindow() { 
    var w = window.open("http://www.example.com/", "my_popup","height=500, width=800 left=20, top=40"); 
    console.log('Left:' + w.screenLeft); 
    console.log('Num anchors: ' + w.document.anchors.length); 
    console.log('Num images: ' + w.document.images.length); 
    w.close(); 
} 

ウィンドウが開き、コンソールが表示さ:

Left: 20 
Num anchors: 0 
Num images: 0 

(はい、例えば、私はこのようなリンクを持っているかもしれませんリンクや画像があります)。だから、ウィンドウが実際にロードされていない可能性がありますので、次のように試してみました。

function openOtherWindow() { 
    var w = window.open("http://www.example.com/", "my_popup","height=500, width=800 left=20, top=40"); 
    w.onload = function() { 
    console.log('Left:' + w.screenLeft); 
    console.log('Num anchors: ' + w.document.anchors.length); 
    console.log('Num images: ' + w.document.images.length); 
    } 
    w.close(); 
} 

そして、今はコンソールに何も表示されません。私は何が起こっているのを見て他の方法を試みた(console.log()alert()と置き換えてください)。

私は、他のウィンドウが開いて読み込まれているときを知る方法の根本的な誤解があると思います。誰も私を混乱させることはできますか?

答えて

1

ドメインが異なる場合、新しいウィンドウのほとんどの(すべてではないにしろ)プロパティにアクセスすることはできません。これは同じ起点ポリシーと呼ばれ、セキュリティ上の理由からです。

たとえば、ウェブサイトに登録し、アクティベーションコードをメールで送信したとします。 「礼儀」から、彼らはGmail、Hotmail、Yahoo Mail、そしてたぶんいくつかの人気のあるメールプロバイダへのリンクを提供する。彼らは新しいウィンドウからコンテンツにアクセスすることができれば、彼らは簡単にあなたがそれを入力すると、パスワードを読むことができる

さらに情報を:。

+0

ありがとうDennis - –

+0

私は何を言っていたのですか?デニス - ありがとうございました。私は同じ原点が私の問題の原因だと思っていました。なぜなら私が試した数百もの変形のいくつかでは、ターゲットウィンドウしかし、私はそれが書き込みにのみ適用されたと思った。これは、私がブラウザから読み込めるものと同じものを(JSで)、またはビューソースから_read_できないことを意味しますか?あなたが提供したリンクを再読します。ありがとう! –

+0

あなたが正しい。それが問題です。 B.計画を立てる。ありがとう!! –

0

ウィンドウを開くと、すぐに空のページが表示されます。そのプロパティは、私は、ドキュメントがロードされた後、あなたはそれ以上に起因して、それはプロパティのアクセスすることはできません

about:blank 

http://www.example.com/ 

<html dir="ltr"><head> 
<meta name="viewport" content="width=device-width"> 
</head> 
<body></body></html> 

を得ているだけでオペラで

var w = window.open("http://www.example.com/", "my_popup","height=500, width=800 left=20, top=40"); 
console.log(w.document.URL); 
console.log(w.history.current); 
console.log(w.document.documentElement.outerHTML); 
w.close(); 

を試してみてください、あなたがアクセスできるものですsame origin policy;代わりにセキュリティエラーが発生し、スクリプトが壊れます。

関連する問題