ブックマークレットがあります。クリックされた場合 (任意のページで):
- mypage.com から src を含むスクリプト要素を挿入します。この src がダウンロードされます。
- src は次のようになります。
- iframe (DOM) を挿入します
- フォーム (DOM) を挿入します。フォームは iframe を対象としています。
- フォームにデータを追加し、mypage.com に送信します
- mypage.com が応答を返します。
<div id = "msg">Message back</div>
- この応答 div は iframe に挿入されます。(Chrome要素タブで確認)
- ここで、返されたメッセージ「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オブジェクトをどのように含めることができますか?