0

この質問は前に見られるかもしれません。しかし、私のシナリオでは成功しませんでした。サンプルの外部リンクを使用して、ローカル HTML ファイルを Iframe にロードしています。

        <a href="http://www.boutell.com/">sample.com</a>

コード:

    <iframe id="iframe_Id" src="sample.html" 
style="background-color:white; height:100%; width:100%;" onload="Load()"; ></iframe>

    function Load() {
alert("loaded");
    var linkchange = document.getElementById("iframe_Id").contentWindow.location;
alert(linkchange);
}

外部リンクをクリックすると、特定のアンカー タグの URL 値が必要になります。

編集:セキュリティ ポリシーにより、異なるドメインの場合は URL を取得できないことはわかっています。しかし、ローカル HTML ページ (クリックしたリンク URL) からの値が必要です。この場合は試していません

これに関して何か助けが必要です。

4

2 に答える 2

2

フレーム内のリンクをクリックすると、親ウィンドウで関数を呼び出すことができます。

親 html では、呼び出しを処理する関数を追加する必要があります。何かのようなもの

function iframeLinkClicked(url) {
     //do stuff
}

次に、子ウィンドウで、ハイパーリンクのクリック イベントを処理する関数を追加します。

function linkClicked(hyperLink) {
    parent.iframeLinkClicked(hyperLink.href);
}

これをすべてのハイパーリンクに追加する必要があります

<a href="http://www.google.com" onclick="linkClicked(this);">google</a>

これで、リンクをクリックすると、親ウィンドウに警告が表示されます。

編集: すべてのハイパーリンクに「onclick」を追加する代わりに。

フレームhtmlが同じドメインにある場合、フレームがロードされたときにフレーム要素にイベントを追加できます。

これは、親ページの完全なスクリプトです。

<script type="text/javascript">

    function iframeLinkClicked(url) {
        alert(url);
    }
    function Load(iframe) {
        iframe.onload = null;
        try {
            var a = document.frames['iframe_Id'].document.getElementsByTagName('a');
            for (var i = 0; i < a.length; i++) {
                a[i].onclick = function () {
                    parent.iframeLinkClicked(this.href);
                    return false;
                };
            }
        } catch (e) {

        }

    }
</script>

これにより、現在の関数が置き換えられますLoad()。そのため、iframe には引き続き load プロパティを設定する必要があります。

子ページに追加するものはもうありません。ここですべて完了です。

<iframe id="iframe_Id" src="sample.html" 
style="background-color:white; height:100%; width:100%;" onload="Load(this);" ></iframe>
于 2013-11-05T13:29:46.997 に答える