JSContext Classe

Définition

Encapsule un moteur JavaScript.

[Foundation.Register("JSContext", true)]
public class JSContext : Foundation.NSObject
[<Foundation.Register("JSContext", true)>]
type JSContext = class
    inherit NSObject
Héritage
JSContext
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 IMyJSVisibleProtocol comme extension IJSExport;:
  • Décore IMyJSVisibleProtocol et il s’agit de méthode MyFunc avec 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 MyJSExporter objet qui, comme décrit ci-dessus, implémente le IMyJSVisibleProtocol;:
  • 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 init .

(Hérité de NSObject)
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)

Méthodes d’extension

Nom Description
AcceptsPreviewPanelControl(NSObject, QLPreviewPanel)

Encapsule un moteur JavaScript.

AccessibilityHitTest(NSObject, CGPoint, UIEvent)

Encapsule un moteur JavaScript.

BeginPreviewPanelControl(NSObject, QLPreviewPanel)

Encapsule un moteur JavaScript.

BrowserAccessibilityDeleteTextAtCursor(NSObject, IntPtr)

Encapsule un moteur JavaScript.

BrowserAccessibilityInsertTextAtCursor(NSObject, String)

Encapsule un moteur JavaScript.

EndPreviewPanelControl(NSObject, QLPreviewPanel)

Encapsule un moteur JavaScript.

GetAccessibilityCustomRotors(NSObject)

Obtient le tableau d’objets UIAccessibilityCustomRotor approprié pour this l’objet.

GetAccessibilityLineEndPositionFromCurrentSelection(NSObject)

Encapsule un moteur JavaScript.

GetAccessibilityLineRangeForPosition(NSObject, IntPtr)

Encapsule un moteur JavaScript.

GetAccessibilityLineStartPositionFromCurrentSelection(NSObject)

Encapsule un moteur JavaScript.

GetAccessibilityNextTextNavigationElement(NSObject)

Encapsule un moteur JavaScript.

GetAccessibilityNextTextNavigationElementBlock(NSObject)

Encapsule un moteur JavaScript.

GetAccessibilityPreviousTextNavigationElement(NSObject)

Encapsule un moteur JavaScript.

GetAccessibilityPreviousTextNavigationElementBlock(NSObject)

Encapsule un moteur JavaScript.

GetAccessibilityTextInputResponder(NSObject)

Encapsule un moteur JavaScript.

GetAccessibilityTextInputResponderHandler(NSObject)

Encapsule un moteur JavaScript.

GetBrowserAccessibilityAttributedValue(NSObject, NSRange)

Encapsule un moteur JavaScript.

GetBrowserAccessibilityContainerType(NSObject)

Encapsule un moteur JavaScript.

GetBrowserAccessibilityCurrentStatus(NSObject)

Encapsule un moteur JavaScript.

GetBrowserAccessibilityHasDomFocus(NSObject)

Encapsule un moteur JavaScript.

GetBrowserAccessibilityIsRequired(NSObject)

Encapsule un moteur JavaScript.

GetBrowserAccessibilityPressedState(NSObject)

Encapsule un moteur JavaScript.

GetBrowserAccessibilityRoleDescription(NSObject)

Encapsule un moteur JavaScript.

GetBrowserAccessibilitySelectedTextRange(NSObject)

Encapsule un moteur JavaScript.

GetBrowserAccessibilitySortDirection(NSObject)

Encapsule un moteur JavaScript.

GetBrowserAccessibilityValue(NSObject, NSRange)

Encapsule un moteur JavaScript.

GetDebugDescription(INSObjectProtocol)

Encapsule un moteur JavaScript.

GetHandle(INativeObject)

Encapsule un moteur JavaScript.

GetNonNullHandle(INativeObject, String)

Encapsule un moteur JavaScript.

GetValidModes(NSObject, NSFontPanel)

Encapsule un moteur JavaScript.

ObjectDidBeginEditing(NSObject, INSEditor)

Encapsule un moteur JavaScript.

ObjectDidEndEditing(NSObject, INSEditor)

Encapsule un moteur JavaScript.

ProvideImageData(NSObject, IntPtr, UIntPtr, UIntPtr, UIntPtr, UIntPtr, UIntPtr, NSObject)

Encapsule un moteur JavaScript.

ProvideImageToMTLTexture(NSObject, IMTLTexture, IMTLCommandBuffer, UIntPtr, UIntPtr, UIntPtr, UIntPtr, NSObject)

Encapsule un moteur JavaScript.

SetAccessibilityCustomRotors(NSObject, UIAccessibilityCustomRotor[])

Définit le tableau d’objets UIAccessibilityCustomRotor approprié pour this l’objet.

SetAccessibilityNextTextNavigationElement(NSObject, NSObject)

Encapsule un moteur JavaScript.

SetAccessibilityNextTextNavigationElementBlock(NSObject, AXObjectReturnBlock)

Encapsule un moteur JavaScript.

SetAccessibilityPreviousTextNavigationElement(NSObject, NSObject)

Encapsule un moteur JavaScript.

SetAccessibilityPreviousTextNavigationElementBlock(NSObject, AXObjectReturnBlock)

Encapsule un moteur JavaScript.

SetAccessibilityTextInputResponder(NSObject, IUITextInput)

Encapsule un moteur JavaScript.

SetAccessibilityTextInputResponderHandler(NSObject, UITextInputReturnHandler)

Encapsule un moteur JavaScript.

SetBrowserAccessibilityContainerType(NSObject, BEAccessibilityContainerType)

Encapsule un moteur JavaScript.

SetBrowserAccessibilityCurrentStatus(NSObject, String)

Encapsule un moteur JavaScript.

SetBrowserAccessibilityHasDomFocus(NSObject, Boolean)

Encapsule un moteur JavaScript.

SetBrowserAccessibilityIsRequired(NSObject, Boolean)

Encapsule un moteur JavaScript.

SetBrowserAccessibilityPressedState(NSObject, BEAccessibilityPressedState)

Encapsule un moteur JavaScript.

SetBrowserAccessibilityRoleDescription(NSObject, String)

Encapsule un moteur JavaScript.

SetBrowserAccessibilitySelectedTextRange(NSObject, NSRange)

Encapsule un moteur JavaScript.

SetBrowserAccessibilitySortDirection(NSObject, String)

Encapsule un moteur JavaScript.

SetSharedObservers(NSObject, NSKeyValueSharedObserversSnapshot)

Encapsule un moteur JavaScript.

ValidateToolbarItem(NSObject, NSToolbarItem)

Encapsule un moteur JavaScript.

S’applique à

Voir aussi