49

ユーザーがiframe内の外部コンテンツを閲覧し、同じページからデータをすばやく入力できるようにする基本的なデータ入力アプリケーションを構築しました。データ変数の1つはURLです。理想的には、iframeの現在のURLをjavascriptを使用してテキストボックスにロードできるようにしたいと思います。私は今、これがセキュリティの問題のために起こらないだろうと気づきました。

サーバー側で何かしたことはありますか?または、ブラウザコントロールの.Netブラウザを知っている。最終的な目標は、ユーザーがiframeで表示しているページのURLを簡単に抽出できるようにすることです。必ずしもiframeである必要はなく、ブラウザーのブラウザーが理想的です。

ありがとう、アダム

4

9 に答える 9

53

の値と の値を比較して、Firefox 3 でいくつかのテストを行い.srcまし.documentWindow.location.hrefiframe。(注:documentWindowは Chrome で呼び出されるcontentDocumentため、Chrome では代わりに.documentWindow.location.hrefになります.contentDocument.location.href。)

srcは常に、ユーザーの操作なしで iframe に読み込まれた最後の URL です。つまり、URL の最初の値、または含まれているウィンドウから Javascript で設定した最後の値が含まれます。

document.getElementById("myiframe").src = 'http://www.google.com/';

ユーザーが iframe 内を移動すると、src を使用して URL の値にアクセスできなくなります。前の例で、ユーザーが www.google.com から離れた場合、次のようにします。

alert(document.getElementById("myiframe").src);

「 http://www.google.com 」は引き続き表示されます。

documentWindow.location.href含まれているウィンドウと同じドメインに iframe にページが含まれている場合にのみ使用できますが、使用可能な場合は、ユーザーが iframe 内を移動した場合でも、常に URL の正しい値が含まれています。

documentWindow.location.href(または の下にあるもの)にアクセスしようとしてdocumentWindow、iframe が含まれているウィンドウのドメインに属していないページにある場合、例外が発生します。

document.getElementById("myiframe").src = 'http://www.google.com/';
alert(document.getElementById("myiframe").documentWindow.location.href);
Error: Permission denied to get property Location.href

他のブラウザはテストしていません。

それが役に立てば幸い!

于 2009-08-07T14:44:31.390 に答える
25
document.getElementById('iframeID').contentWindow.location.href

クロスドメインの iframe の場所にはまったくアクセスできません。

于 2009-03-20T16:10:03.157 に答える
2

私はこれを使います。

var iframe = parent.document.getElementById("theiframe");
var innerDoc = iframe.contentDocument || iframe.contentWindow.document;

var currentFrame = innerDoc.location.href;
于 2013-07-20T20:39:28.607 に答える
1

HTAは通常のWindowsアプリケーションのように機能します。
HTMLコードを記述し、それを.htaファイルとして保存します。

ただし、少なくとも1つの欠点があります。ブラウザが.htaファイルを開くことができないことです。通常の.exeプログラムとして処理されます。したがって、.htaへのリンクをWebページに配置すると、ダウンロードダイアログが開き、HTAファイルを開くか保存するかを尋ねられます。問題がない場合は、[開く]をクリックすると、新しいウィンドウが開きます(ツールバーがないため、[戻る]ボタンも、アドレスバーも、メニューバーもありません)。

私はあなたが望むことと非常に似た何かをする必要がありましたが、代わりにiframes、私は本物を使用しましたframeset
メインページは.htaファイルである必要があります。もう1つは、通常の.htmページ(または.phpなど)である必要があります。

これは、2つのフレームを持つHTAページの例です。一番上のページには、2番目のフレームのURLを含むボタンとテキストフィールドがあります。ボタンはフィールドを更新します:

frameset.hta

<html>
    <head>
        <title>HTA Example</title>
        <HTA:APPLICATION id="frames" border="thin" caption="yes" icon="http://www.google.com/favicon.ico" showintaskbar="yes" singleinstance="no" sysmenu="yes" navigable="yes" contextmenu="no" innerborder="no" scroll="auto" scrollflat="yes" selection="yes" windowstate="normal"></HTA:APPLICATION>
    </head>
    <frameset rows="60px, *">
        <frame src="topo.htm" name="topo" id="topo" application="yes" />
        <frame src="http://www.google.com" name="conteudo" id="conteudo" application="yes" />
    </frameset>
</html>
  • ファイルにいくつかのプロパティを設定するHTA:APPLICATIONタグがあります。持っているのは良いことですが、必須ではありません。
  • フレームのタグに配置する必要があります。application="yes"それらもプログラムに属しているので、すべてのデータにアクセスできるはずです(そうでない場合でも、フレームには以前のエラーが表示されます)。

topo.htm

<html>
    <head>
        <title>Topo</title>
        <script type="text/javascript">
            function copia_url() {
                campo.value = parent.conteudo.location;
            }
        </script>
    </head>
    <body style="background: lightBlue;" onload="copia_url()">
        <input type="button" value="Copiar URL" onclick="copia_url()" />
        <input type="text" size="120" id="campo" />
    </body>
</html>
  • フィールドをフェッチするためにgetElement関数を使用しなかったことに注意してください。HTAファイルでは、IDを持つすべての要素が即座にオブジェクトになります

これがあなたやこの質問に答える他の人たちに役立つことを願っています。それは私の問題を解決しました、それはあなたが持っているのと同じように見えます。

詳細については、http

://www.irt.org/articles/js191/index.htm お楽しみください=]をご覧ください。

于 2009-05-07T18:55:28.443 に答える
1

私が提案した実装の実装は少しゲットーに聞こえますが、私はあなたのサーバーサイドのアイデアが好きです。

iframeの.innerHTMLを、サーバー側で取得するHTMLコンテンツに設定できます。これをどのように取得するかに応じて、相対パスと絶対パスに注意を払う必要があります。

さらに、取得しているページが他のページとどのように相互作用するかによっては、これは完全に機能しない可能性があります(取得しているページに設定されているCookieはドメイン間で機能せず、Javascriptで状態が追跡されている可能性があります...多くの理由これは機能しない可能性があります。)

ミラーリングしようとしているページの現在の状態を追跡することが理論的に可能であるとは思いませんが、よくわかりません。サイトはサーバー側であらゆる種類のものを追跡できます。この状態にアクセスすることはできません。ページの読み込み時に変数がサーバー側でランダムな値に設定されている場合を想像してみてください。この状態をどのようにキャプチャしますか?

これらのアイデアは何か役に立ちますか?

-ブライアンJ.スティナー-

于 2010-08-31T17:08:07.557 に答える
0

Ra-Ajaxを使用して、iframe を Window コントロールなどの内部にラップすることができます。一般的に言えば、私は人々にiframeを使用することをお勧めしません(にでも)

もう 1 つの方法は、HTML をサーバーにロードし、Label などのコンテンツとして Window に直接送信することです。このAjax RSS パーサーがどのように RSS 項目をソースにロードしているかを確認してください。ソースはここからダウンロードできます(オープン ソース - LGPL) 。

(免責事項; 私は Ra-Ajax を使用しています...)

于 2008-12-02T00:15:48.600 に答える
-1

これは役に立ちますか?

http://www.quirksmode.org/js/iframe.html

私はこれをFirefoxでテストしただけですが、次のようなものがある場合:

<iframe name='myframe' id='myframe' src='http://www.google.com'></iframe>

次を使用してアドレスを取得できます。

document.getElementById('myframe').src

私があなたの質問を正しく理解したかどうかはわかりませんが、とにかく:)

于 2008-09-05T17:31:31.723 に答える
-1

さて、このアプリケーションには、ユーザーにリンクまたはそのiframeが外部サイトを参照できるようにする容量が提供されているiframeがあります。次に、ユーザーが参照したURLをキャプチャしようとしています。

覚えておくべきこと。URLは外部ソース宛てであるため、JavaScript(またはクライアント側のアクセス)を介してこのiframeとやり取りできる量が制限されます。これは、明らかにご存知のとおり、ブラウザーのクロスドメインセキュリティとして知られています。 。ここに示すように、巧妙な回避策があります。クロスドメイン、クロスフレームのJavascriptですが、この場合、この回避策は当てはまらないと思います。

アクセスできるのは、必要に応じて場所だけです。

提示されたコードをより回復力があり、エラーが発生しにくいものにすることをお勧めします。JavaScriptエラーを表示するように構成されたIEまたはFFを使用して、いつかWebを閲覧してみてください。スローされるjavascriptエラーの数に驚かれることでしょう。これは主に、エラーが発生しやすいjavascriptがたくさんあり、それが増え続けているためです。

このソリューションは、問題のiframeがjavascriptを実行しているのと同じ「ウィンドウ」コンテキストであることを前提としています。(つまり、別のフレームまたはiframe内に埋め込まれていません。その場合、javascriptコードがより複雑になり、ウィンドウ階層を再帰的に検索する必要があります。)

<iframe name='frmExternal' id='frmExternal' src='http://www.stackoverflow.com'></frame>
<input type='text' id='txtUrl' />
<input type='button' id='btnGetUrl' value='Get URL' onclick='GetIFrameUrl();' />

<script language='javascript' type='text/javascript'>
function GetIFrameUrl()
{
    if (!document.getElementById)
    {
        return;
    }

    var frm = document.getElementById("frmExternal");
    var txt = document.getElementById("txtUrl");

    if (frm == null || txt == null)
    {
        // not great user feedback but slightly better than obnoxious script errors
       alert("There was a problem with this page, please refresh.");
       return;
    }

    txt.value = frm.src;
}
</script>

お役に立てれば。

于 2008-09-06T02:10:05.330 に答える
-1

iframeのsrcプロパティにアクセスできますが、最初に読み込まれたURLのみが表示されます。ユーザーが経由してiframe内を移動している場合は、セキュリティの問題を解決するためにHTAを使用する必要があります。

http://msdn.microsoft.com/en-us/library/ms536474(VS.85).aspx

リンクを確認し、HTAを使用して、iframeの「application」プロパティを設定すると、document.hrefプロパティにアクセスし、必要に応じてDOM要素とその値を含むすべての情報を解析できます。

于 2008-12-01T23:43:14.953 に答える