2017-09-26 8 views
-2

私はボタン付きのWebページを持っています。クリックコードは次のとおりです。document.writeで作成したドキュメントでjavascript関数を呼び出す

var html = ...html string containing visual and script elements... 
var view = window.open(); 
view.document.write(html); 
view.init(<parameters>); // see next code block 

HTMLコンテンツは、次のとおりです。

<!DOCTYPE html> 
<html> 
<head> 
    <title></title> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
    <style type="text/css"> 
     html, body { 
      height: 100%; 
      margin: 0; 
     } 
    </style> 
</head> 
<body> 
    <div id="id1"></div> 
    <script> 
     function init(<parameters>) { 
      ...work... 
     } 
    </script> 
</body> 
</html> 

問題はクロームでinit関数呼び出しである:私はIEにいる場合は、すべての良い、しかし、クロームで、私は「INITを取得関数は定義されていません "例外です。 これをすべてのブラウザで機能させるにはどうすればよいですか?もちろん、サーバーのラウンドトリップを必要としないソリューションを探しています。

答えて

-1

これは本当にexacltyですが、私はそれを読んだので、それ以上のクロムやファイアウォールを行うことができます。それは、あなたが何かをやり遂げることができるそれらの例の1つかもしれません。

-1

同じドメインにない場合は、新しいウィンドウに書き込むことはできません。私が示唆しているのは、内部にiframeを開くことができるということです。 document.writeを使用して

How to write to iframe

How to write to page on same domain

+0

もちろん、新しいウィンドウを作成してそれに書き込むことができます。これを行うと、仮想ドキュメントを作成しています。この場合、ドメインは問題ではありません。 –

+0

あなたは正しいです、私は質問を誤解しました。 –

0

それは私がしたいページを作成するために来るとき、実際の作業ではありません。問題は、そのページ内のjavascriptブロックで定義された関数を呼び出すときです。ブラウザによって異なる結果が出るので、これはまだ完全に標準化されていない問題だと思います。これについてインターネット上に投稿がありますが、私は明確かつ共通の答えを見つけることができませんでした。 それから、回避策を使って私の難局を解決しました。 、

<!DOCTYPE html> 
<html> 
<head> 
    <title></title> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
    <style type="text/css"> 
     html, body { 
      height: 100%; 
      margin: 0; 
     } 
    </style> 
</head> 
<body> 
    <div id="id1"></div> 
    <script> 
     (init = function() { 
      var parameter1 = ${{placeholder1}} 
      var parameter2 = ${{placeholder2}} 
      ... 
      ...work... 
     })(); 
    </script> 
</body> 
</html> 

作成するコード、その後、実際の値でプレースホルダを置き換えます:最初のマークアップは、今のパラメータのプレースホルダが含まれています

var html = ...html string containing placeholders... 
html = html.replace("${{placeholder1}}", actual1); 
html = html.replace("${{placeholder2}}", actual2); 
... 
var view = window.open(); 
view.document.write(html); 

今init関数は、同じページのコンテキストで呼び出され、これはChromeでも有効です。

関連する問題