2

ブックマークレットがあります。クリックされた場合 (任意のページで):

  1. mypage.com から src を含むスクリプト要素を挿入します。この src がダウンロードされます。
  2. src は次のようになります。
    • iframe (DOM) を挿入します
    • フォーム (DOM) を挿入します。フォームは iframe を対象としています。
    • フォームにデータを追加し、mypage.com に送信します
  3. mypage.com が応答を返します。<div id = "msg">Message back</div>
  4. この応答 div は iframe に挿入されます。(Chrome要素タブで確認)
  5. ここで、返されたメッセージ「Message back」に警告したいと思います。動いていない。

iframe を作成するときに、そのonloadイベントを設定しました。

var i = document.createElement('iframe');
i.setAttribute('id', 'frame-id');
i.setAttribute('onload', 'iframeFormSubmitted();');

次に、関数があります:

function iframeFormSubmitted(){
    // in try-catch, alerting error
    var iframe = document.getElementById("frame-id");
    var iframeDocument = iframe.contentDocument || iframe.contentWindow.document;
    var msg = iframeDocument.getElementById("msg").innerHTML;
    alert(msg);

}

これは最終的に2回呼び出されます(フォームをiframeにも書き込むため、最初だと思います)。エラーは次のとおりです。

cannot read property innerHTMl of null
cannot call method getElementById of undefined

編集: contentDocument は未定義です。私はそれがクロスドメインのことだと思っています.コンテンツを含むiFrameに、未定義のcontentDocumentオブジェクトをどのように含めることができますか?

4

1 に答える 1