私は Web ブラウザ コントロールを使用しており、document.InvokeScript を使用して Javascript で関数を呼び出そうとしています。
Process.Exited のイベント ハンドラーを呼び出す部分を除いて、コード内のどこでも機能します。
//this function is being called from Javascript code.
public void Open()
{
//****FROM HERE TO......****
Object[] param = new Object[2];
param[0] = "play";
param[1] = "playDisabled";
webBrowser1.Document.InvokeScript("disable", param);
param[0] = "playDisabled";
param[1] = "Playing";
webBrowser1.Document.InvokeScript("setText", param);
//****THERE, INVOKESCRIPT WORKS....****
//there i open exe file...
Process GameLaunch = new Process();
GameLaunch.StartInfo.FileName = ExtractPath + gameFile;
GameLaunch.StartInfo.Arguments = ExtractPath + gameFile;
GameLaunch.EnableRaisingEvents = true;
//after its closed i call GameLaunch_Exited method.
GameLaunch.Exited += new EventHandler(GameLaunch_Exited);
GameLaunch.Start();
}
void GameLaunch_Exited(object sender, EventArgs e)
{
InvokeScript("btnReset", "#playDisabled");
}
private object InvokeScript(string name, params object[] args)
{
//here it fires an error.
return webBrowser1.Document.InvokeScript(name, args);
}
private void button1_Click_1(object sender, EventArgs e)
{
InvokeScript("btnReset", "#playDisabled");
string output = "";
int i = 0;
foreach (HtmlElement element in webBrowser1.Document.GetElementsByTagName("a"))
{
i++;
output += i+". Element: id: "+ element.Id + ", inner html: "+ element.InnerHtml + Environment.NewLine;
}
MessageBox.Show(output);
}
このコードから得られるのは、指定されたキャストが無効です。
以下にいくつかの画面を示します。
ところで、ボタンクリックハンドラーから呼び出すと、InvokeScriptメソッドが機能します。また、Exited Handler から呼び出された場合はそうではありません。
私は本当に混乱しています。
そしてエラー自体:
私のJSを見たい方へ。
function btnReset(id){
$(document).ready(function(){
$(id).removeClass("disabled");
$(id).html("Start");
$(id).attr("id", "play");
});
}
編集: 例外メッセージ:
タイプ 'System.InvalidCastException' の未処理の例外が System.Windows.Forms.dll で発生しました {"指定されたキャストは無効です。"}
追加情報: 指定されたキャストは無効です。
助けてくれてありがとう。
-乾杯
-ニック。