JSContext Classe
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Encapsule un moteur JavaScript.
[Foundation.Register("JSContext", true)]
public class JSContext : Foundation.NSObject
[<Foundation.Register("JSContext", true)>]
type JSContext = class
inherit NSObject
- Héritage
- Attributs
Remarques
Il JSContext s’agit de l’objet central de l’espace JavaScriptCore de noms. La JSContext gestion d’un environnement JavaScript (manipulé par la Item[NSObject] propriété) et évalue les scripts avec la EvaluateScript(String, NSUrl) méthode.
Les développeurs d’applications souhaitent souvent affecter un délégué à la propriété ExceptionHandler pour accéder, dans leur code Xamarin.iOS, des exceptions levées dans le domaine JavaScript.
L’exemple suivant montre l’utilisation de base de JSContext. Le contexte est instancié et un gestionnaire d’exceptions simple est affecté. L’une des surcharges de From(NSObject, JSContext) méthode est utilisée pour affecter des valeurs aux variables arg1 JavaScript et arg2. La méthode EvaluateScript(String, NSUrl) évalue le code JavaScript et retourne le résultat, qui est converti en objet .NET avec la méthode ToInt32().
jsContext = new JSContext();
jsContext.ExceptionHandler = (context, exception) => {
Console.WriteLine(exception);
};
jsContext[new NSString("arg1")] = JSValue.From(2, jsContext);
jsContext[new NSString("arg2")] = JSValue.From(2, jsContext);
var jsResult = jsContext.EvaluateScript("arg1 + arg2;");
var four = jsResult.ToInt32();
Contient JSContext le contexte JavaScript global, y compris les variables définies par les calculs JavaScript, comme illustré dans l’exemple suivant :
jsContext.EvaluateScript("sum = 2 + 2;");
var four = jsContext[(NSString)"sum"].ToInt32();
Appel du code C# à partir de JavaScript
Les développeurs peuvent étendre l’interface IJSExport pour définir des méthodes qui peuvent être appelées à partir de JavaScript. Les développeurs doivent marquer cette interface avec l’attribut ProtocolAttribute et marquer les méthodes pouvant être appelées par JavaScript avec l’attribut ExportAttribute . Ils doivent également définir la propriété Registrar MSBuild sur « static » ou « managed-static » dans les fichiers projet. Par exemple:
[Protocol ()]
interface IMyJSVisibleProtocol : IJSExport {
[Export ("myFunc")]
int MyFunc ();
[Export ("Arity2:With:")]
NSObject Arity2With(NSObject arg1, NSObject arg2);
}
class MyJSExporter : NSObject, IMyJSVisibleProtocol
{
public int MyFunc ()
{
Console.WriteLine ("Called!");
return 42;
}
public NSObject Arity2With(NSObject arg1, NSObject arg2)
{
Console.WriteLine ("Arity 2 function called with " + arg1 + " " + arg2);
return (NSNumber) 42;
}
}
L’exemple ci-dessus :
-
Définit
IMyJSVisibleProtocolcomme extension IJSExport;: -
Décore
IMyJSVisibleProtocolet il s’agit de méthodeMyFuncavec les attributs et ExportAttribute les ProtocolAttribute attributs ; : - Implémente l’interface :
Pour exposer javaScript IMyJSVisibleProtocol , le développeur peut utiliser du code comme suit dans la ViewDidLoad() méthode de leur UIViewController:
webView = new UIWebView(UIScreen.MainScreen.Bounds);
var context = (JSContext) webView.ValueForKeyPath ((NSString) "documentView.webView.mainFrame.javaScriptContext");
context.ExceptionHandler = (JSContext context2, JSValue exception) =>
{
Console.WriteLine ("JS exception: {0}", exception);
};
var myExporter = new MyJSExporter ();
context [(NSString) "myCSharpObject"] = JSValue.From (myExporter, context);
webView.LoadRequest(NSUrlRequest.FromUrl(new NSUrl("MyHtmlFile.html", false)));
Code C# ci-dessus :
- Crée un UIWebView élément qui sera affiché à l’utilisateur final ;
- Obtient le JSContext cadre principal de l’objet UIWebView ; :
- Adds un gestionnaire d’exceptions afin que les problèmes JavaScript soient visibles par le projet Xamarin ; :
-
Instancie un nouvel
MyJSExporterobjet qui, comme décrit ci-dessus, implémente leIMyJSVisibleProtocol;: -
Ajoute cet objet au JSContext nom
myCSharpObject;: - Charge un fichier HTML (voir ci-dessous) :
Enfin, le fichier HTML chargé dans l’objet UIWebView et dans lequel JSContext l’objet MyJSExporter a été placé peut accéder à l’objet à partir de JavaScript :
<html>
<head>
<title></title>
<script type="text/javascript">
function callXamObject() {
// `myCSharpObject` injected into JS context by C# code `context [(NSString) "myCSharpObject"] = JSValue.From (...etc...`
var resultCalculatedInCSharp = myCSharpObject.myFunc();
document.getElementById("Output").innerHTML = resultCalculatedInCSharp;
}
function callArity2Method() {
//Note how this is mapped by [Export ("Arity2:With:")]
var result = myCSharpObject.Arity2With("foo", "bar");
}
</script>
</head>
<body>
<div onclick="callXamObject()" class="button">
Click Me
</div>
<div id="Output">Value</div>
</body>
</html>
Pour exporter un objet C# afin qu’il soit visible par JavaScript, le développeur doit ajouter l’argument --registrar:static aux arguments utilisés par mtouch. Dans Xamarin Studio, cette opération s’effectue dans la boîte de dialogue Options Project, dans le volet Options de génération / Build iOS :

Une autre technique pour appeler du code C# à partir de Xamarin.iOS consiste à utiliser REST, comme indiqué dans les sections suivantes :
Dans le code JavaScript, utilisez XMLHttpRequest et utilisez des techniques JSON standard pour publier et analyser une requête sur un service REST s’exécutant sur l’appareil local :
<html>
<head>
<title></title>
<script type="text/javascript">
function callCSharp(msg) {
var request = new XMLHttpRequest();
request.open('GET','http://127.0.0.1:1711/', false);
request.send();
if(request.status == 200){
alert(JSON.parse(request.responseText));
}else{
alert("Error");
}
}
</script>
</head>
<body>
<div onclick="callCSharp('this is a test')" class="button">
Click Me
</div>
</body>
</html>
Dans l’application, utilisez-la HttpListener pour écouter et répondre à cette demande :
//Wire up listener
listener = new HttpListener();
listener.Prefixes.Add("http://*:1711/");
listener.Start();
listener.BeginGetContext(new AsyncCallback(Callback), listener);
//....etc...
void Callback(IAsyncResult result)
{
//Get the listener context
var context = listener.EndGetContext(result);
//Start listening for the next request
listener.BeginGetContext(new AsyncCallback(Callback), listener);
var response = CalculateResponse();
var responseBytes = System.Text.Encoding.UTF8.GetBytes(response);
context.Response.ContentType = "text/json";
context.Response.StatusCode = HttpStatusCode.OK;
context.Response.ContentLength64 = responseBytes.Length;
context.Response.OutputStream.Write(responseBytes, 0, responseBytes.Length);
context.Response.OutputStream.Close();
}
Enfin, une troisième technique consiste à interroger l’indicateur JSContext défini par un calcul JavaScript.
Constructeurs
| Nom | Description |
|---|---|
| JSContext() |
Encapsule un moteur JavaScript. |
| JSContext(JSVirtualMachine) |
Encapsule un moteur JavaScript. |
| JSContext(NativeHandle) |
Constructeur utilisé lors de la création de représentations managées d’objets non managés. Appelé par le runtime. |
| JSContext(NSObjectFlag) |
Constructeur pour appeler des classes dérivées pour ignorer l’initialisation et simplement allouer l’objet. |
Propriétés
| Nom | Description |
|---|---|
| AccessibilityAttributedUserInputLabels |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| AccessibilityRespondsToUserInteraction |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| AccessibilityTextualContext |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| AccessibilityUserInputLabels |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| Class |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| ClassHandle |
Handle de classe Objective-C pour cette classe. |
| CurrentArguments |
Encapsule un moteur JavaScript. |
| CurrentCallee |
Encapsule un moteur JavaScript. |
| CurrentContext |
Encapsule un moteur JavaScript. |
| CurrentThis |
Encapsule un moteur JavaScript. |
| DebugDescription |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| Description |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| Exception |
Encapsule un moteur JavaScript. |
| ExceptionHandler |
Encapsule un moteur JavaScript. |
| ExposedBindings |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| GlobalObject |
Encapsule un moteur JavaScript. |
| Handle |
Handle (pointeur) vers la représentation d’objet non managée. (Hérité de NSObject) |
| Inspectable |
Encapsule un moteur JavaScript. |
| IsDirectBinding |
Obtient ou définit une valeur indiquant si cette instance utilise une liaison de Objective-C directe. (Hérité de NSObject) |
| IsProxy |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| Item[NSObject] |
Encapsule un moteur JavaScript. |
| JSGlobalContextRefPtr |
Encapsule un moteur JavaScript. |
| Name |
Encapsule un moteur JavaScript. |
| RetainCount |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| Self |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| Superclass |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| SuperHandle |
Handle utilisé pour représenter les méthodes dans la classe de base pour ce NSObject. (Hérité de NSObject) |
| VirtualMachine |
Encapsule un moteur JavaScript. |
| Zone |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
Méthodes
| Nom | Description |
|---|---|
| AddObserver(NSObject, NSString, NSKeyValueObservingOptions, IntPtr) |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| AddObserver(NSObject, String, NSKeyValueObservingOptions, IntPtr) |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| AddObserver(NSString, NSKeyValueObservingOptions, Action<NSObservedChange>) |
Inscrit un objet pour être observé en externe à l’aide d’une méthode arbitraire. (Hérité de NSObject) |
| AddObserver(String, NSKeyValueObservingOptions, Action<NSObservedChange>) |
Inscrit un objet pour être observé en externe à l’aide d’une méthode arbitraire. (Hérité de NSObject) |
| AwakeFromNib() |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| BeginInvokeOnMainThread(Action) |
Appelle l’action spécifiée de manière asynchrone sur le thread d’interface utilisateur principal. (Hérité de NSObject) |
| BeginInvokeOnMainThread(Selector, NSObject) |
Appelle de façon asynchrone le code spécifié sur le thread d’interface utilisateur principal. (Hérité de NSObject) |
| Bind(NSString, NSObject, String, NSBindingOptions) |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| Bind(NSString, NSObject, String, NSDictionary) |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| CommitEditing() |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| CommitEditing(NSObject, Selector, IntPtr) |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| ConformsToProtocol(NativeHandle) |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| Copy() |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| DangerousAutorelease() |
Appelle le sélecteur « autorelease » sur cet objet. (Hérité de NSObject) |
| DangerousRelease() |
Appelle le sélecteur « release » sur cet objet. (Hérité de NSObject) |
| DangerousRetain() |
Appelle le sélecteur « conserver » sur cet objet. (Hérité de NSObject) |
| DidChange(NSKeyValueChange, NSIndexSet, NSString) |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| DidChange(NSString, NSKeyValueSetMutationKind, NSSet) |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| DidChangeValue(String) |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| Dispose() |
Libère les ressources utilisées par l’objet NSObject . (Hérité de NSObject) |
| Dispose(Boolean) |
Libère les ressources utilisées par cet objet. (Hérité de NSObject) |
| DoesNotRecognizeSelector(Selector) |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| Equals(NSObject) |
Détermine si le spécifié NSObject est égal à l’actuel NSObject. (Hérité de NSObject) |
| Equals(Object) |
Détermine si l’objet spécifié est égal à l’objet actuel NSObject. (Hérité de NSObject) |
| EvaluateScript(String, NSUrl) |
Encapsule un moteur JavaScript. |
| EvaluateScript(String) |
Encapsule un moteur JavaScript. |
| FromJSGlobalContextRef(IntPtr) |
Encapsule un moteur JavaScript. |
| GetBindingInfo(NSString) |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| GetBindingOptionDescriptions(NSString) |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| GetBindingValueClass(NSString) |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| GetDictionaryOfValuesFromKeys(NSString[]) |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| GetHashCode() |
Génère un code de hachage pour l’instance actuelle. (Hérité de NSObject) |
| GetMethodForSelector(Selector) |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| GetNativeHash() |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| Init() |
Initialise l’objet en appelant la méthode Objective-C |
| InitializeHandle(NativeHandle, String) |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| InitializeHandle(NativeHandle) |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| Invoke(Action, Double) |
Appelle l’action spécifiée après le délai spécifié. (Hérité de NSObject) |
| Invoke(Action, TimeSpan) |
Appelle l’action spécifiée après le délai spécifié. (Hérité de NSObject) |
| InvokeOnMainThread(Action) |
Appelle l’action spécifiée de façon synchrone sur le thread d’interface utilisateur principal. (Hérité de NSObject) |
| InvokeOnMainThread(Selector, NSObject) |
Appelle de façon synchrone le code spécifié sur le thread d’interface utilisateur principal. (Hérité de NSObject) |
| IsEqual(NSObject) |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| IsKindOfClass(Class) |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| IsMemberOfClass(Class) |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| MarkDirty() |
Promeut un objet homologue standard (IsDirectBinding est vrai) en objet toggleref. (Hérité de NSObject) |
| MutableCopy() |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| ObjectDidEndEditing(NSObject) |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| ObserveValue(NSString, NSObject, NSDictionary, IntPtr) |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| PerformSelector(Selector, NSObject, Double, NSString[]) |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| PerformSelector(Selector, NSObject, Double) |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| PerformSelector(Selector, NSObject, NSObject) |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| PerformSelector(Selector, NSObject) |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| PerformSelector(Selector, NSThread, NSObject, Boolean, NSString[]) |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| PerformSelector(Selector, NSThread, NSObject, Boolean) |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| PerformSelector(Selector) |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| PrepareForInterfaceBuilder() |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| RemoveObserver(NSObject, NSString, IntPtr) |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| RemoveObserver(NSObject, NSString) |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| RemoveObserver(NSObject, String, IntPtr) |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| RemoveObserver(NSObject, String) |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| RespondsToSelector(Selector) |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| SetNilValueForKey(NSString) |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| SetValueForKey(NSObject, NSString) |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| SetValueForKeyPath(NativeHandle, NSString) |
Définit la valeur de la propriété identifiée par un chemin d’accès de clé donné à une valeur donnée. (Hérité de NSObject) |
| SetValueForKeyPath(NSObject, NSString) |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| SetValueForUndefinedKey(NSObject, NSString) |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| SetValuesForKeysWithDictionary(NSDictionary) |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| ToString() |
Retourne une représentation sous forme de chaîne de la valeur de l’instance actuelle. (Hérité de NSObject) |
| Unbind(NSString) |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| ValueForKey(NSString) |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| ValueForKeyPath(NSString) |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| ValueForUndefinedKey(NSString) |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| WillChange(NSKeyValueChange, NSIndexSet, NSString) |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| WillChange(NSString, NSKeyValueSetMutationKind, NSSet) |
Encapsule un moteur JavaScript. (Hérité de NSObject) |
| WillChangeValue(String) |
Encapsule un moteur JavaScript. (Hérité de NSObject) |