問題タブ [htmlbridge]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - Silverlight 型を Microsoft AJAX に渡し、パラメーター検証を渡す
Microsoft ASP.NET AJAX クライアント ライブラリを利用したい Silverlight アプリケーションに取り組んでいます。Silverlight 2 の一部である HTML Bridge を使用してライブラリを呼び出しています。Silverlight は、JavaScript とマネージ コードの間での型の受け渡しをサポートしていますが、問題にぶつかりました。
Microsoft ASP.NET AJAX クライアント ライブラリには「型システム」が含まれており、フレームワークが行うことの 1 つは、パラメーターが正しい型であることを検証することです。私が呼び出している特定の関数はSys.Application.addHistoryPoint
で、検証コードは次のようになります。
すべての種類の CLR 型を状態パラメーターとして渡そうとしました (C# 構造体、[ScriptableTypes]、Dictionary 型など)。エラーが発生するたびに:
"Sys.ArgumentTypeException: タイプ 'Function' のオブジェクトをタイプ 'Object' に変換できません
このエラーは明らかにパラメーターの検証から来ています...しかし、なぜASP.NET AJAXは私の型が関数であると考えるのですか? MS AJAXの型検証を理解している人はいますか?
呼び出すHtmlPage.Window.Eval("...")
などの回避策を実行して、JS 統合を文字列として渡すことができることはわかっていますが、そうしたくありません。状態パラメーターとして実際の .NET 型を渡したいです。
javascript - LocationCollectionはScriptableTypeとしてタグ付けされていませんが、スクリプトでインスタンス化できます(どうしてですか?)
私は、JavaScriptとSilverlightの間でデータを渡すことを含む小さなSilverlightアプリケーションに取り組んでいます。また、Silverlight仮想地球制御を使用しています。
私が遭遇した奇妙な点は、Microsoft.Maps.MapControl.LocationCollectionをスクリプト作成可能なタイプとして登録し、それをインスタンス化してScriptableMemberに渡すことができることです。これは素晴らしいことですが、LocationCollectionがScriptableTypeとしてタグ付けされている場所がわかりません-明らかな何かが欠けていますか?
App.xaml.csのコード-Application_Startup
動作するJavascriptコード!
JavaScriptでクラスのインスタンスをインスタンス化するには、型を[ScriptableType]としてタグ付けし、型を作成可能な型として登録する必要があると思いました。私が知る限り、LocationCollection(またはそのスーパークラスのいずれか)にはこの属性があります。
誰かが私の心の中でこれを二乗するのを手伝ってくれる?
javascript - SilverlightのHtmlPage.PopupWindow()を使用してポップアップが閉じられたときの通知
HtmlPage.PopupWindow()
このメソッドを使用して、SilverlightアプリケーションからHTMLページをポップアップしています。Silverlight内からポップアップウィンドウが閉じられたときのイベントを処理しようとしています。これは私がこれをしようとしている方法です:
ただし、イベントハンドラーが呼び出されることはありません。これは可能なことですか、それとも私は何かを逃していますか?
SilverlightアプリとHTMLポップアップページは同じドメインにありますが、実際には異なるポートにあります。異なるポートにあるページはサイト間の制限と見なされ、JavaScriptが失敗する可能性があると考えていました。
javascript - SilverLight メソッドを起動する Javascript ボタン?
JSON 文字列に格納されたデータから多層球 (同心円と考えてください) の断面イメージを基本的に構築する Silverlight アプリケーションを作成しました。JSON 文字列は、直径と色の値の配列であり、次のようになります。
Silverlight 内ですべてが動作しています。上記の JSON を使用してブラウザーでアプリを読み込むと、2 つの同心円のレンダリングが正常に取得されます。内側の円は直径 100 ピクセルの白 (#ffffff) で、外側の円は赤 (#ff0000) です。直径 150 ピクセル。偉大な。
ここで、これを HTML ページ内に統合し、その JSON データを JavaScript から Silverlight に渡す必要があります。SIlverlight が提供する HTMLBridge 機能を使用していますが、Javascript から Viz を構築する Silverlight メソッドを呼び出すのに問題があります。
Silverlight でのメソッド名は BuildViz() で、Silverlight キャンバスからすべての既存の要素を削除し、JSONData という名前のパブリック プロパティから視覚化を再構築します。JSONData は、値の設定時に BuildViz() メソッドを呼び出します。
HTMLBridge を使用して JSONData を javascript に公開し、javascript を介してその値を設定しようとしましたが、BuildViz() メソッドが呼び出されていないようです (または、呼び出されてもキャンバスには影響しません)。ここからどこへ行くべきかわからない。私がオンラインで見た HTMLBridge の例は非常に基本的なもので、文字列を大文字に変換し、その値を呼び出し元の JavaScript に返すなどの単純な方法しか扱っていません。Silverlight 内で実際にメソッドを実行する必要があります。
どんな助けでも大歓迎です。
ティア
javascript - SilverlightのScriptableMemberプロパティにJavascriptのインスタンスプロパティを設定できますか?
Silverlightコントロールに次の(2)'ScriptableMember'タイプがあります。
ここでの目的は、明らかにJavascriptのHTMLブリッジを介した公開を可能にすることです。'Message'プロパティの呼び出しは簡単で、次のように完全に機能します。
ただし、JSでインスタンスプロパティにドリルダウンして、インスタンスプロパティの値を設定するのに問題があります。私が思うコードは次のようになります:
'MType'に追加し、'Name'という名前のパブリックプロパティの1つにアクセスしたことに注目してください。MyCustomTypeクラスには、必要に応じてすべての適切な「ScriptableMember」属性があります。
ただし、上記の行を実行すると、次のエラーが発生します。
「MicrosoftJScriptランタイムエラー:オブジェクトはこのプロパティまたはメソッドをサポートしていません」
'メッセージ'の割り当てで問題なく動作します。JSでインスタンスプロパティをドリルダウンしてその変数を割り当てることは可能ですか?もしそうなら、私はJSが正しくないか、これを修正するために何をする必要がありますか。ありがとう!
c# - JavaScript 配列を適切な型に変換できないのはなぜですか?
HTMLBridge を介してマネージ コード内のメソッドに JavaScript 配列とディクショナリ型オブジェクトを渡すのに問題があります。このトピックの詳細を説明したマイクロソフトの記事やネット上の情報は、私をどこにも導きませんでした。
リンクされた記事の次の情報を使用します。
オブジェクトとして型指定された NET Framework プロパティまたは入力パラメーターは、ターゲットの .NET Framework プロパティまたは入力パラメーターに値でマーシャリングするときに、次のヒューリスティックを使用して変換されます。
JavaScript 配列は に変換され
object[]
ます。JavaScript 辞書は に変換され
Dictionary<string,object>
ます。
...いくつかの方法で配列とディクショナリ オブジェクトをマネージド コードに渡そうとしましたが、成功しませんでした。
Javascript:
C# (試行 #1):
C# (試行 #2):
C# (試行 #3):
例外の形式は次のとおりです(「TARGET TYPE」は、明示的または暗黙的なキャスト (を含むObject[]
)の結果として期待されるオブジェクトの型です。
SCRIPT16389: System.ArgumentException: このオブジェクトは、指定されたタイプTARGET TYPEに変換できません。パラメータ名: targetType
System.Windows.Browser.ScriptObject.ConvertTo (type targetType、ブール型 allowSerialization) で
System.Windows.Hosting.ScriptingInterface.GetScriptParamValueForType (ScriptParam scriptParam、desiredType の種類) で
System.Windows.Hosting.ScriptingInterface.ConvertFromScriptParams (ParameterInfo[] パラメーター、ScriptParam[] 引数) で
System.Windows.Browser.ManagedObjectInfo.ScriptMethod.Invoke (ManagedObject obj、InvokeType invokeType、ScriptParam[] args) で
System.Windows.Browser.ManagedObjectInfo.Invoke (ManagedObject obj、InvokeType invokeType、文字列 memberName、ScriptParam[] args) で
System.Windows.Hosting.ManagedHost.InvokeScriptableMember (IntPtr pHandle、Int32 nMemberID、Int32 nInvokeType、Int32 nArgCount、ScriptParam[] pArgs、ScriptParam& pResult、ExceptionInfo& pExcepInfo) で
(辞書オブジェクトを C# に as として渡すための同様の試みが行われましたDictionary<string, object>
)。
これらの試みは、前述の記事以降の情報の誤解の結果ですか? または、私の実装は単に間違っていますか?
補遺:
私はScriptObject.getProperty()
で私が望むことを達成する方法を認識していますが、可能であれば具体的で正確な型を扱いたいと思っています。キー付きの値が前の 2 つのいずれかとしてボックス化解除できない場合、ネイティブ型、String、または ScriptObject のいずれかを返すという事実は言うまでもありません。ネイティブ型にたどり着くまで、任意にネストされたオブジェクトで繰り返し呼び出すようになるのは嫌です。