VBスクリプトは、ブラウザ ランタイム内のクライアントで実行されます。
ブラウザー内で実行できると認識している唯一の C# ソリューションは、silverlight です。ただし、それはまだC#です。
VB- of java-script などのスクリプト言語から c# コードにアクセスするには[ScriptableMember]
、次のように属性で装飾します。
/// <summary>
/// Members that can be called from javascript. (or vbscript)
/// </summary>
public sealed class LINEARVIEWER_SL_SCRIPTS {
[ScriptableMember]
public void ChangeNetwork(string pNetworkFilterId, string pNetworkFilter) {
MainViewModel MainVM = (MainViewModel)((MainPage)Application.Current.RootVisual).DataContext;
long SectionID;
if (long.TryParse(pNetworkFilterId, out SectionID) == false) {
throw new FormatException("'" + pNetworkFilterId + "' not a valid section / network ID.");
}
MainVM.RoadFilterViewModel.SelectSectionAsync(SectionID, /* completed handler = */ null);
}
}
次のように、Silverligh (c#) アプリケーションの起動時にこれらのクラスを登録する必要があります。
private void Application_Startup(object sender, StartupEventArgs e) {
...
HtmlPage.RegisterScriptableObject("LINEARVIEWER_SL_SCRIPTS", new LINEARVIEWER_SL_SCRIPTS());
}
Java (または vb) スクリプトから、これらのメソッドを次のように簡単に呼び出すことができます。
function DoAddToLIV(pNetworkFilterId, pNetworkFilter) {
...
gObjLIV.Content.LINEARVIEWER_SL_SCRIPTS.ChangeNetwork(pNetworkFilterId, pNetworkFilter);
...
}
はgObjLIB.Content
、html ページ内の Silverlight オブジェクトの ID です。
var gObjLIV = null;
function onSilverlightPluginLoaded(sender, args) {
gObjLIV = sender.getHost();
}
このパラメーターを使用して、ASPX ページの html でその関数を silverlight オブジェクトにフックできます。
<param name="onLoad" value="onSilverlightPluginLoaded" />
何か見逃した場合や、さらに例が必要な場合はお知らせください。私は気にしない。