Browser上でScriptを実行する
DWTのBrowserクラスには、SWT3.Xのexecute()が存在しないので、CBrowserというカスタムコントロールをつくり、SWTからスクリプト実行メソッドを移植しました。
ほぼ、SWTそのままです。
/* IBM Corporation - initial API and implementation */ // スクリプトを実行 void execute(char[] script) { if (script.length == 0) { return; } /* get IHTMLDocument2 */ char[][] args; args ~= "Document"; int[] rgdispid = automation.getIDsOfNames(args); //$NON-NLS-1$ int dispIdMember = rgdispid[0]; Variant pVarResult = automation.getProperty(dispIdMember); if (pVarResult == null || pVarResult.getType() == COM.VT_EMPTY) return false; OleAutomation document = pVarResult.getAutomation(); pVarResult.dispose(); /* get IHTMLWindow2 */ args = null; args ~= "parentWindow"; rgdispid = document.getIDsOfNames(args); //$NON-NLS-1$ dispIdMember = rgdispid[0]; pVarResult = document.getProperty(dispIdMember); OleAutomation ihtmlWindow2 = pVarResult.getAutomation(); pVarResult.dispose(); document.dispose(); args = null; args ~= "execScript"; args ~= "code"; rgdispid = ihtmlWindow2.getIDsOfNames(args); //$NON-NLS-1$ //$NON-NLS-2$ Variant[] rgvarg = new Variant[1]; rgvarg[0] = new Variant(script); int[] rgdispidNamedArgs = new int[1]; rgdispidNamedArgs[0] = rgdispid[1]; pVarResult = ihtmlWindow2.invoke(rgdispid[0], rgvarg, rgdispidNamedArgs); rgvarg[0].dispose(); ihtmlWindow2.dispose(); if (pVarResult == null) return false; pVarResult.dispose(); return true; }
これは、便利です。