JSContext Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Hermetyzuje aparat JavaScript.
[Foundation.Register("JSContext", true)]
public class JSContext : Foundation.NSObject
[<Foundation.Register("JSContext", true)>]
type JSContext = class
inherit NSObject
- Dziedziczenie
- Atrybuty
Uwagi
Obiekt JSContext jest centralnym obiektem JavaScriptCore przestrzeni nazw. Obiekt JSContext obsługuje środowisko JavaScript (manipulowane przez Item[NSObject] właściwość) i ocenia skrypty za pomocą EvaluateScript(String, NSUrl) metody .
Deweloperzy aplikacji często chcą przypisać delegata do właściwości ExceptionHandler w celu uzyskania dostępu w kodzie Xamarin.iOS wyjątków zgłoszonych w obszarze JavaScript.
W poniższym przykładzie przedstawiono podstawowe użycie metody JSContext. Kontekst jest tworzone i przypisywana jest prosta procedura obsługi wyjątków.
From(NSObject, JSContext) Jednym z przeciążeń metody jest przypisywanie wartości do zmiennych arg1 JavaScript i arg2. Metoda EvaluateScript(String, NSUrl) oblicza kod JavaScript i zwraca wynik, który jest konwertowany z powrotem na obiekt .NET za pomocą metody 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();
Zawiera JSContext globalny kontekst języka JavaScript, w tym zmienne ustawione przez obliczenia języka JavaScript, jak pokazano w poniższym przykładzie:
jsContext.EvaluateScript("sum = 2 + 2;");
var four = jsContext[(NSString)"sum"].ToInt32();
Wywoływanie kodu w języku C# z poziomu języka JavaScript
Deweloperzy mogą rozszerzyć interfejs, IJSExport aby zdefiniować metody, które mogą być wywoływane z języka JavaScript. Deweloperzy muszą oznaczyć ten interfejs atrybutem ProtocolAttribute i muszą oznaczyć metody wywoływane w języku JavaScript za pomocą atrybutu ExportAttribute . Muszą również ustawić właściwość Registrar MSBuild na wartość "static" lub "managed-static" w plikach projektu. Przykład:
[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;
}
}
Powyższy przykład:
-
Definiuje
IMyJSVisibleProtocoljako rozszerzenie IJSExport;: -
IMyJSVisibleProtocolDekoruje i jest to metodaMyFuncz atrybutami ProtocolAttribute iExportAttribute;: - Implementuje interfejs:
Aby uwidocznić IMyJSVisibleProtocol kod javaScript, deweloper może użyć kodu podobnego do następującego UIViewControllerw ViewDidLoad() metodzie :
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)));
Powyższy kod języka C#:
- Tworzy obiekt UIWebView , który będzie wyświetlany użytkownikowi końcowemu;:
- JSContext UIWebView Pobiera główną ramkę obiektu;:
- Dodaj procedurę obsługi wyjątków, aby problem z językiem JavaScript był widoczny dla projektu Xamarin; :
-
Tworzy wystąpienie nowego
MyJSExporterobiektu, który, zgodnie z powyższym opisem, implementuje obiektIMyJSVisibleProtocol;: -
Dodaje ten obiekt do JSContext obiektu o nazwie
myCSharpObject;: - Ładuje plik HTML (patrz poniżej):
Na koniec plik HTML załadowany do UIWebView obiektu i, do którego JSContextMyJSExporter został umieszczony obiekt, może uzyskać dostęp do obiektu z poziomu języka 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>
Aby wyeksportować obiekt języka C#, aby był widoczny dla języka JavaScript, deweloper musi dodać --registrar:static argument do argumentów używanych przez mtouchprogram . W programie Xamarin Studio jest to wykonywane w oknie dialogowym Opcje Project w okienku Opcje kompilacji / Kompilacja systemu iOS:

Inną techniką wywoływania kodu w języku C# z Xamarin.iOS jest użycie interfejsu REST, jak pokazano poniżej:
W kodzie JavaScript użyj XMLHttpRequest standardowych technik JSON, aby opublikować i przeanalizować zapytanie w usłudze REST uruchomionej na urządzeniu lokalnym:
<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>
W aplikacji użyj polecenia HttpListener , aby nasłuchiwać i odpowiadać na to żądanie:
//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();
}
Na koniec trzecią techniką jest sondowanie JSContext flagi ustawionej przez obliczenie języka JavaScript.
Konstruktory
| Nazwa | Opis |
|---|---|
| JSContext() |
Hermetyzuje aparat JavaScript. |
| JSContext(JSVirtualMachine) |
Hermetyzuje aparat JavaScript. |
| JSContext(NativeHandle) |
Konstruktor używany podczas tworzenia zarządzanych reprezentacji niezarządzanych obiektów. Wywoływane przez środowisko uruchomieniowe. |
| JSContext(NSObjectFlag) |
Konstruktor do wywołania klas pochodnych, aby pominąć inicjowanie i jedynie przydzielić obiekt. |
Właściwości
| Nazwa | Opis |
|---|---|
| AccessibilityAttributedUserInputLabels |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| AccessibilityRespondsToUserInteraction |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| AccessibilityTextualContext |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| AccessibilityUserInputLabels |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| Class |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| ClassHandle |
Uchwyt klasy Objective-C dla tej klasy. |
| CurrentArguments |
Hermetyzuje aparat JavaScript. |
| CurrentCallee |
Hermetyzuje aparat JavaScript. |
| CurrentContext |
Hermetyzuje aparat JavaScript. |
| CurrentThis |
Hermetyzuje aparat JavaScript. |
| DebugDescription |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| Description |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| Exception |
Hermetyzuje aparat JavaScript. |
| ExceptionHandler |
Hermetyzuje aparat JavaScript. |
| ExposedBindings |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| GlobalObject |
Hermetyzuje aparat JavaScript. |
| Handle |
Dojdź (wskaźnik) do niezarządzanej reprezentacji obiektu. (Odziedziczone po NSObject) |
| Inspectable |
Hermetyzuje aparat JavaScript. |
| IsDirectBinding |
Pobiera lub ustawia wartość wskazującą, czy to wystąpienie używa powiązania bezpośredniego Objective-C. (Odziedziczone po NSObject) |
| IsProxy |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| Item[NSObject] |
Hermetyzuje aparat JavaScript. |
| JSGlobalContextRefPtr |
Hermetyzuje aparat JavaScript. |
| Name |
Hermetyzuje aparat JavaScript. |
| RetainCount |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| Self |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| Superclass |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| SuperHandle |
Dojście używane do reprezentowania metod w klasie bazowej dla tego elementu NSObject. (Odziedziczone po NSObject) |
| VirtualMachine |
Hermetyzuje aparat JavaScript. |
| Zone |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
Metody
| Nazwa | Opis |
|---|---|
| AddObserver(NSObject, NSString, NSKeyValueObservingOptions, IntPtr) |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| AddObserver(NSObject, String, NSKeyValueObservingOptions, IntPtr) |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| AddObserver(NSString, NSKeyValueObservingOptions, Action<NSObservedChange>) |
Rejestruje obiekt do obserwowanego zewnętrznie przy użyciu dowolnej metody. (Odziedziczone po NSObject) |
| AddObserver(String, NSKeyValueObservingOptions, Action<NSObservedChange>) |
Rejestruje obiekt do obserwowanego zewnętrznie przy użyciu dowolnej metody. (Odziedziczone po NSObject) |
| AwakeFromNib() |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| BeginInvokeOnMainThread(Action) |
Wywołuje określoną akcję asynchronicznie w głównym wątku interfejsu użytkownika. (Odziedziczone po NSObject) |
| BeginInvokeOnMainThread(Selector, NSObject) |
Wywołuje asynchronicznie określony kod w głównym wątku interfejsu użytkownika. (Odziedziczone po NSObject) |
| Bind(NSString, NSObject, String, NSBindingOptions) |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| Bind(NSString, NSObject, String, NSDictionary) |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| CommitEditing() |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| CommitEditing(NSObject, Selector, IntPtr) |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| ConformsToProtocol(NativeHandle) |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| Copy() |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| DangerousAutorelease() |
Wywołuje selektor "autorelease" dla tego obiektu. (Odziedziczone po NSObject) |
| DangerousRelease() |
Wywołuje selektor "release" dla tego obiektu. (Odziedziczone po NSObject) |
| DangerousRetain() |
Wywołuje selektor "zachowaj" dla tego obiektu. (Odziedziczone po NSObject) |
| DidChange(NSKeyValueChange, NSIndexSet, NSString) |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| DidChange(NSString, NSKeyValueSetMutationKind, NSSet) |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| DidChangeValue(String) |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| Dispose() |
Zwalnia zasoby używane przez NSObject obiekt . (Odziedziczone po NSObject) |
| Dispose(Boolean) |
Zwalnia zasoby używane przez ten obiekt. (Odziedziczone po NSObject) |
| DoesNotRecognizeSelector(Selector) |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| Equals(NSObject) |
Określa, czy określona NSObject wartość jest równa bieżącej NSObjectwartości . (Odziedziczone po NSObject) |
| Equals(Object) |
Określa, czy określony obiekt jest równy bieżącemu NSObject. (Odziedziczone po NSObject) |
| EvaluateScript(String, NSUrl) |
Hermetyzuje aparat JavaScript. |
| EvaluateScript(String) |
Hermetyzuje aparat JavaScript. |
| FromJSGlobalContextRef(IntPtr) |
Hermetyzuje aparat JavaScript. |
| GetBindingInfo(NSString) |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| GetBindingOptionDescriptions(NSString) |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| GetBindingValueClass(NSString) |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| GetDictionaryOfValuesFromKeys(NSString[]) |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| GetHashCode() |
Generuje kod skrótu dla bieżącego wystąpienia. (Odziedziczone po NSObject) |
| GetMethodForSelector(Selector) |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| GetNativeHash() |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| Init() |
Inicjuje obiekt, wywołując metodę Objective-C |
| InitializeHandle(NativeHandle, String) |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| InitializeHandle(NativeHandle) |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| Invoke(Action, Double) |
Wywołuje określoną akcję po określonym opóźnieniu. (Odziedziczone po NSObject) |
| Invoke(Action, TimeSpan) |
Wywołuje określoną akcję po określonym opóźnieniu. (Odziedziczone po NSObject) |
| InvokeOnMainThread(Action) |
Wywołuje określoną akcję synchronicznie w głównym wątku interfejsu użytkownika. (Odziedziczone po NSObject) |
| InvokeOnMainThread(Selector, NSObject) |
Wywołuje synchronicznie określony kod w głównym wątku interfejsu użytkownika. (Odziedziczone po NSObject) |
| IsEqual(NSObject) |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| IsKindOfClass(Class) |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| IsMemberOfClass(Class) |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| MarkDirty() |
Promuje zwykły obiekt elementu równorzędnego (IsDirectBinding ma wartość true) do obiektu toggleref. (Odziedziczone po NSObject) |
| MutableCopy() |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| ObjectDidEndEditing(NSObject) |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| ObserveValue(NSString, NSObject, NSDictionary, IntPtr) |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| PerformSelector(Selector, NSObject, Double, NSString[]) |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| PerformSelector(Selector, NSObject, Double) |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| PerformSelector(Selector, NSObject, NSObject) |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| PerformSelector(Selector, NSObject) |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| PerformSelector(Selector, NSThread, NSObject, Boolean, NSString[]) |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| PerformSelector(Selector, NSThread, NSObject, Boolean) |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| PerformSelector(Selector) |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| PrepareForInterfaceBuilder() |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| RemoveObserver(NSObject, NSString, IntPtr) |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| RemoveObserver(NSObject, NSString) |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| RemoveObserver(NSObject, String, IntPtr) |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| RemoveObserver(NSObject, String) |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| RespondsToSelector(Selector) |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| SetNilValueForKey(NSString) |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| SetValueForKey(NSObject, NSString) |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| SetValueForKeyPath(NativeHandle, NSString) |
Ustawia wartość właściwości zidentyfikowanej przez daną ścieżkę klucza do danej wartości. (Odziedziczone po NSObject) |
| SetValueForKeyPath(NSObject, NSString) |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| SetValueForUndefinedKey(NSObject, NSString) |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| SetValuesForKeysWithDictionary(NSDictionary) |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| ToString() |
Zwraca ciąg reprezentujący wartość bieżącego wystąpienia. (Odziedziczone po NSObject) |
| Unbind(NSString) |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| ValueForKey(NSString) |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| ValueForKeyPath(NSString) |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| ValueForUndefinedKey(NSString) |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| WillChange(NSKeyValueChange, NSIndexSet, NSString) |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| WillChange(NSString, NSKeyValueSetMutationKind, NSSet) |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |
| WillChangeValue(String) |
Hermetyzuje aparat JavaScript. (Odziedziczone po NSObject) |