別の Web ブラウザーを開く別の PopupWindow を作成すると、戻り値として、Silverlight プロジェクトの静的な "HtmlPage.Window" と同じオブジェクト タイプである HtmlWindow オブジェクトが返されます。そのオブジェクト タイプは、「Invoke」および「Eval」メソッドを提供します。
Silverlight コードの文字列値 (Eval) またはポップアップした URI 内 (Invoke) に配置できる JavaScript を評価したいと考えています。
私が使用する別のスクリプト実行方法, 失敗します. eval の場合、「Eval failed.」という InvalidOperationException が返されます。メッセージ。Invoke の場合、「Failed to Invoke: TalkToJavaScript.」という InvalidOperationException が返されます。メッセージ。
PopupWindow で JavaScript を実行する方法はありますか。
ここのコードは簡単なテストです。ボタンを初めて押すと、新しい webbrowser インスタンスで uri がポップアップします。2 回目にクリックすると、宛先 uri ウィンドウで JavaScript を実行しようとします。** "m_window.Invoke("TalkToJavaScript", "pute");" で失敗します
HTML コード
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript">
function TalkToJavaScript(data) {
alert("Message received from Silverlight: " + data);
}
</script>
</head>
<body>
<div id="content" />
</body>
</html>
Silverlight コード
private void Button_Click(object sender, System.Windows.RoutedEventArgs e)
{
if (m_window == null)
{
HtmlPopupWindowOptions options = new HtmlPopupWindowOptions();
options.Left = 0;
options.Top = 0;
options.Width = 800;
options.Height = 600;
m_window = HtmlPage.PopupWindow(new Uri("http://www.visionwww.com/tests/ContentInjectionTest.html"),
"new", options);
}
else
{
m_window.Invoke("TalkToJavaScript", "test");
//m_window.Eval("alert(\"Message received from Silverlight\");");
}
}