JSContext Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Kapselt ein JavaScript-Modul.
[Foundation.Register("JSContext", true)]
public class JSContext : Foundation.NSObject
[<Foundation.Register("JSContext", true)>]
type JSContext = class
inherit NSObject
- Vererbung
- Attribute
Hinweise
Das JSContext ist das zentrale Objekt des JavaScriptCore Namespace. Die JSContext Verwaltet eine JavaScript-Umgebung (bearbeitet durch die Item[NSObject] Eigenschaft) und wertet Skripts mit der EvaluateScript(String, NSUrl) Methode aus.
Anwendungsentwickler möchten häufig der eigenschaft ExceptionHandler einen Delegaten zuweisen, um in ihrem Xamarin.iOS-Code Zugriff auf Ausnahmen zu erhalten, die im JavaScript-Bereich ausgelöst werden.
Das folgende Beispiel zeigt die grundlegende Verwendung von JSContext. Der Kontext wird instanziiert und ein einfacher Ausnahmehandler zugewiesen. Eine der From(NSObject, JSContext) Methodenüberladungen wird verwendet, um den JavaScript-Variablen arg1 Werte zuzuweisen und arg2. Die EvaluateScript(String, NSUrl)-Methode wertet das JavaScript aus und gibt das Ergebnis zurück, das mit der ToInt32()-Methode wieder in ein .NET-Objekt konvertiert wird.
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();
Dies JSContext enthält den globalen JavaScript-Kontext, einschließlich variablen, die von JavaScript-Berechnungen festgelegt werden, wie im folgenden Beispiel gezeigt:
jsContext.EvaluateScript("sum = 2 + 2;");
var four = jsContext[(NSString)"sum"].ToInt32();
Aufrufen von C#-Code aus JavaScript
Entwickler können die IJSExport Schnittstelle erweitern, um Methoden zu definieren, die aus JavaScript aufgerufen werden können. Entwickler müssen diese Schnittstelle mit dem ProtocolAttribute Attribut markieren und JavaScript-aufrufbare Methoden mit dem ExportAttribute Attribut markieren. Sie müssen die MSBuild-Eigenschaft Registrar auch auf "static" oder "managed-static" in den Projektdateien festlegen. Beispiel:
[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;
}
}
Das obige Beispiel:
-
IMyJSVisibleProtocolDefiniert als Erweiterung IJSExport;: -
Schmückt
IMyJSVisibleProtocolund es ist MethodeMyFuncmit den ProtocolAttribute und ExportAttribute Attributen;: - Implementiert die Schnittstelle:
Um javaScript IMyJSVisibleProtocol verfügbar zu machen, könnte der Entwickler Code wie die folgende in der ViewDidLoad() Methode ihrer UIViewControllerverwenden:
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)));
Der obige C#-Code:
- Erstellt eine UIWebView , die dem Endbenutzer angezeigt wird;:
- Ruft den JSContext Hauptrahmen des UIWebView Objekts ab;:
- Weitert einen Ausnahmehandler, sodass JavaScript-Probleme für das Xamarin Projekt sichtbar sind; :
-
Instanziiert ein neues
MyJSExporterObjekt, das, wie oben beschrieben, dieIMyJSVisibleProtocol;: -
Fügt das Objekt mit dem JSContext Namen
myCSharpObject;: - Lädt eine HTML-Datei (siehe unten):
Schließlich kann die HTML-Datei, die in die UIWebView und in deren JSContextMyJSExporter Objekt platziert wurde, von JavaScript aus auf das Objekt zugreifen:
<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>
Um ein C#-Objekt so zu exportieren, dass es für JavaScript sichtbar ist, muss der Entwickler das --registrar:static Argument zu den argumenten hinzufügen, die von mtouch. In Xamarin Studio erfolgt dies im Dialogfeld Project Optionen im Bereich "Buildoptionen/iOS-Build":

Ein weiteres Verfahren zum Aufrufen von C#-Code aus Xamarin.iOS besteht darin, REST zu verwenden, wie in den folgenden Beispielen gezeigt:
Verwenden XMLHttpRequest Sie im JavaScript-Code und standardmäßige JSON-Techniken, um eine Abfrage an einen REST-Dienst zu senden und zu analysieren, der auf dem lokalen Gerät ausgeführt wird:
<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>
Verwenden Sie HttpListener in der Anwendung, um diese Anforderung zu überwachen und darauf zu reagieren:
//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();
}
Schließlich besteht eine dritte Technik darin, die JSContext Kennzeichnung einer JavaScript-Berechnung abzufragen.
Konstruktoren
| Name | Beschreibung |
|---|---|
| JSContext() |
Kapselt ein JavaScript-Modul. |
| JSContext(JSVirtualMachine) |
Kapselt ein JavaScript-Modul. |
| JSContext(NativeHandle) |
Ein Konstruktor, der beim Erstellen verwalteter Darstellungen von nicht verwalteten Objekten verwendet wird. Wird von der Laufzeit aufgerufen. |
| JSContext(NSObjectFlag) |
Konstruktor, der abgeleitete Klassen aufruft, um die Initialisierung zu überspringen und das Objekt lediglich zuzuweisen. |
Eigenschaften
| Name | Beschreibung |
|---|---|
| AccessibilityAttributedUserInputLabels |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| AccessibilityRespondsToUserInteraction |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| AccessibilityTextualContext |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| AccessibilityUserInputLabels |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| Class |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| ClassHandle |
Das Objective-C Klassenhandle für diese Klasse. |
| CurrentArguments |
Kapselt ein JavaScript-Modul. |
| CurrentCallee |
Kapselt ein JavaScript-Modul. |
| CurrentContext |
Kapselt ein JavaScript-Modul. |
| CurrentThis |
Kapselt ein JavaScript-Modul. |
| DebugDescription |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| Description |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| Exception |
Kapselt ein JavaScript-Modul. |
| ExceptionHandler |
Kapselt ein JavaScript-Modul. |
| ExposedBindings |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| GlobalObject |
Kapselt ein JavaScript-Modul. |
| Handle |
Handle (Zeiger) auf die nicht verwaltete Objektdarstellung. (Geerbt von NSObject) |
| Inspectable |
Kapselt ein JavaScript-Modul. |
| IsDirectBinding |
Dient zum Abrufen oder Festlegen eines Werts, der angibt, ob diese Instanz direkte Objective-C Bindung verwendet. (Geerbt von NSObject) |
| IsProxy |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| Item[NSObject] |
Kapselt ein JavaScript-Modul. |
| JSGlobalContextRefPtr |
Kapselt ein JavaScript-Modul. |
| Name |
Kapselt ein JavaScript-Modul. |
| RetainCount |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| Self |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| Superclass |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| SuperHandle |
Handle, das verwendet wird, um die Methoden in der Basisklasse für diese NSObjectdarzustellen. (Geerbt von NSObject) |
| VirtualMachine |
Kapselt ein JavaScript-Modul. |
| Zone |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
Methoden
| Name | Beschreibung |
|---|---|
| AddObserver(NSObject, NSString, NSKeyValueObservingOptions, IntPtr) |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| AddObserver(NSObject, String, NSKeyValueObservingOptions, IntPtr) |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| AddObserver(NSString, NSKeyValueObservingOptions, Action<NSObservedChange>) |
Registriert ein Objekt für die externe Beobachtung mithilfe einer beliebigen Methode. (Geerbt von NSObject) |
| AddObserver(String, NSKeyValueObservingOptions, Action<NSObservedChange>) |
Registriert ein Objekt für die externe Beobachtung mithilfe einer beliebigen Methode. (Geerbt von NSObject) |
| AwakeFromNib() |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| BeginInvokeOnMainThread(Action) |
Ruft die angegebene Aktion asynchron im Haupt-UI-Thread auf. (Geerbt von NSObject) |
| BeginInvokeOnMainThread(Selector, NSObject) |
Ruft asynchron den angegebenen Code im Haupt-UI-Thread auf. (Geerbt von NSObject) |
| Bind(NSString, NSObject, String, NSBindingOptions) |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| Bind(NSString, NSObject, String, NSDictionary) |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| CommitEditing() |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| CommitEditing(NSObject, Selector, IntPtr) |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| ConformsToProtocol(NativeHandle) |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| Copy() |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| DangerousAutorelease() |
Ruft den Selektor "autorelease" für dieses Objekt auf. (Geerbt von NSObject) |
| DangerousRelease() |
Ruft den Selektor "Release" für dieses Objekt auf. (Geerbt von NSObject) |
| DangerousRetain() |
Ruft die Auswahl "beibehalten" für dieses Objekt auf. (Geerbt von NSObject) |
| DidChange(NSKeyValueChange, NSIndexSet, NSString) |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| DidChange(NSString, NSKeyValueSetMutationKind, NSSet) |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| DidChangeValue(String) |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| Dispose() |
Gibt die vom NSObject Objekt verwendeten Ressourcen frei. (Geerbt von NSObject) |
| Dispose(Boolean) |
Gibt die von diesem Objekt verwendeten Ressourcen frei. (Geerbt von NSObject) |
| DoesNotRecognizeSelector(Selector) |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| Equals(NSObject) |
Bestimmt, ob der angegebene NSObject Wert gleich dem aktuellen NSObjectist. (Geerbt von NSObject) |
| Equals(Object) |
Bestimmt, ob das angegebene Objekt dem aktuellen NSObjectentspricht. (Geerbt von NSObject) |
| EvaluateScript(String, NSUrl) |
Kapselt ein JavaScript-Modul. |
| EvaluateScript(String) |
Kapselt ein JavaScript-Modul. |
| FromJSGlobalContextRef(IntPtr) |
Kapselt ein JavaScript-Modul. |
| GetBindingInfo(NSString) |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| GetBindingOptionDescriptions(NSString) |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| GetBindingValueClass(NSString) |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| GetDictionaryOfValuesFromKeys(NSString[]) |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| GetHashCode() |
Generiert einen Hashcode für die aktuelle Instanz. (Geerbt von NSObject) |
| GetMethodForSelector(Selector) |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| GetNativeHash() |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| Init() |
Initialisiert das Objekt durch Aufrufen der Objective-C-Methode |
| InitializeHandle(NativeHandle, String) |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| InitializeHandle(NativeHandle) |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| Invoke(Action, Double) |
Ruft die angegebene Aktion nach der angegebenen Verzögerung auf. (Geerbt von NSObject) |
| Invoke(Action, TimeSpan) |
Ruft die angegebene Aktion nach der angegebenen Verzögerung auf. (Geerbt von NSObject) |
| InvokeOnMainThread(Action) |
Ruft die angegebene Aktion synchron im Haupt-UI-Thread auf. (Geerbt von NSObject) |
| InvokeOnMainThread(Selector, NSObject) |
Ruft synchron den angegebenen Code im Haupt-UI-Thread auf. (Geerbt von NSObject) |
| IsEqual(NSObject) |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| IsKindOfClass(Class) |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| IsMemberOfClass(Class) |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| MarkDirty() |
Fördert ein reguläres Peerobjekt (IsDirectBinding ist wahr) in ein Toggleref-Objekt. (Geerbt von NSObject) |
| MutableCopy() |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| ObjectDidEndEditing(NSObject) |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| ObserveValue(NSString, NSObject, NSDictionary, IntPtr) |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| PerformSelector(Selector, NSObject, Double, NSString[]) |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| PerformSelector(Selector, NSObject, Double) |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| PerformSelector(Selector, NSObject, NSObject) |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| PerformSelector(Selector, NSObject) |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| PerformSelector(Selector, NSThread, NSObject, Boolean, NSString[]) |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| PerformSelector(Selector, NSThread, NSObject, Boolean) |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| PerformSelector(Selector) |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| PrepareForInterfaceBuilder() |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| RemoveObserver(NSObject, NSString, IntPtr) |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| RemoveObserver(NSObject, NSString) |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| RemoveObserver(NSObject, String, IntPtr) |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| RemoveObserver(NSObject, String) |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| RespondsToSelector(Selector) |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| SetNilValueForKey(NSString) |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| SetValueForKey(NSObject, NSString) |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| SetValueForKeyPath(NativeHandle, NSString) |
Legt den Wert für die Eigenschaft fest, die durch einen bestimmten Schlüsselpfad auf einen bestimmten Wert identifiziert wird. (Geerbt von NSObject) |
| SetValueForKeyPath(NSObject, NSString) |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| SetValueForUndefinedKey(NSObject, NSString) |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| SetValuesForKeysWithDictionary(NSDictionary) |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| ToString() |
Gibt eine Zeichenfolgendarstellung des Werts der aktuellen Instanz zurück. (Geerbt von NSObject) |
| Unbind(NSString) |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| ValueForKey(NSString) |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| ValueForKeyPath(NSString) |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| ValueForUndefinedKey(NSString) |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| WillChange(NSKeyValueChange, NSIndexSet, NSString) |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| WillChange(NSString, NSKeyValueSetMutationKind, NSSet) |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |
| WillChangeValue(String) |
Kapselt ein JavaScript-Modul. (Geerbt von NSObject) |