JSContext Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Encapsula un motor de JavaScript.
[Foundation.Register("JSContext", true)]
public class JSContext : Foundation.NSObject
[<Foundation.Register("JSContext", true)>]
type JSContext = class
inherit NSObject
- Herencia
- Atributos
Comentarios
JSContext es el objeto central del JavaScriptCore espacio de nombres.
JSContext mantiene un entorno de JavaScript (manipulado por la Item[NSObject] propiedad) y evalúa los scripts con el EvaluateScript(String, NSUrl) método .
A menudo, los desarrolladores de aplicaciones querrán asignar un delegado a la propiedad />
En el ejemplo siguiente se muestra el uso básico de JSContext. Se crea una instancia del contexto y se asigna un controlador de excepciones simple. Una de las sobrecargas del From(NSObject, JSContext) método se usa para asignar valores a las variables arg1 de JavaScript y arg2. El método
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();
JSContext contiene el contexto global de JavaScript, incluidas las variables establecidas por los cálculos de JavaScript, como se muestra en el ejemplo siguiente:
jsContext.EvaluateScript("sum = 2 + 2;");
var four = jsContext[(NSString)"sum"].ToInt32();
Llamar al código de C# desde JavaScript
Los desarrolladores pueden ampliar la IJSExport interfaz para definir métodos a los que se puede llamar desde JavaScript. Los desarrolladores deben marcar esa interfaz con el ProtocolAttribute atributo y deben marcar los métodos invocables de JavaScript con el ExportAttribute atributo . También deben establecer la propiedad Registrar MSBuild en "static" o "managed-static" en los archivos del proyecto. Por ejemplo:
[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;
}
}
En el ejemplo anterior:
-
Define
IMyJSVisibleProtocolcomo extensión IJSExport;: -
Decora
IMyJSVisibleProtocoly es el métodoMyFunccon los ProtocolAttribute atributos y ExportAttribute ;: - Implementa la interfaz :
Para exponer en IMyJSVisibleProtocol JavaScript, el desarrollador podría usar código como el siguiente en el ViewDidLoad() método de su 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)));
El código de C# anterior:
- Crea un objeto UIWebView que se mostrará al usuario final;:
- Obtiene del JSContextUIWebView marco principal del objeto;:
- Agregar un controlador de excepciones para que los problemas de JavaScript sean visibles para el proyecto de Xamarin; :
-
Crea una instancia de un nuevo
MyJSExporterobjeto que, como se ha descrito anteriormente, implementa elIMyJSVisibleProtocolobjeto ;: -
Agrega ese objeto al JSContext objeto con el nombre
myCSharpObject;: - Carga un archivo HTML (consulte a continuación):
Por último, el archivo HTML que se carga en UIWebView y en cuyo JSContextMyJSExporter objeto se ha colocado puede tener acceso al objeto desde 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>
Para exportar un objeto de C# para que sea visible para JavaScript, el desarrollador debe agregar el --registrar:static argumento a los argumentos usados por mtouch. En Xamarin Studio, esto se hace en el cuadro de diálogo Opciones de Project, en el panel Opciones de compilación /compilación de iOS:

Otra técnica para llamar al código de C# desde Xamarin.iOS es usar REST, como se muestra en lo siguiente:
En el código JavaScript, use y las XMLHttpRequest técnicas JSON estándar para publicar y analizar una consulta en un servicio REST que se ejecuta en el dispositivo 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>
En la aplicación, use HttpListener para escuchar y responder a esa solicitud:
//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();
}
Por último, una tercera técnica consiste en sondear para JSContext una marca establecida por un cálculo de JavaScript.
Constructores
| Nombre | Description |
|---|---|
| JSContext() |
Encapsula un motor de JavaScript. |
| JSContext(JSVirtualMachine) |
Encapsula un motor de JavaScript. |
| JSContext(NativeHandle) |
Constructor usado al crear representaciones administradas de objetos no administrados. Llamado por el tiempo de ejecución. |
| JSContext(NSObjectFlag) |
Constructor para llamar a en clases derivadas para omitir la inicialización y simplemente asignar el objeto. |
Propiedades
| Nombre | Description |
|---|---|
| AccessibilityAttributedUserInputLabels |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| AccessibilityRespondsToUserInteraction |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| AccessibilityTextualContext |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| AccessibilityUserInputLabels |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| Class |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| ClassHandle |
Identificador de clase Objective-C para esta clase. |
| CurrentArguments |
Encapsula un motor de JavaScript. |
| CurrentCallee |
Encapsula un motor de JavaScript. |
| CurrentContext |
Encapsula un motor de JavaScript. |
| CurrentThis |
Encapsula un motor de JavaScript. |
| DebugDescription |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| Description |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| Exception |
Encapsula un motor de JavaScript. |
| ExceptionHandler |
Encapsula un motor de JavaScript. |
| ExposedBindings |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| GlobalObject |
Encapsula un motor de JavaScript. |
| Handle |
Controla (puntero) a la representación de objeto no administrada. (Heredado de NSObject) |
| Inspectable |
Encapsula un motor de JavaScript. |
| IsDirectBinding |
Obtiene o establece un valor que indica si esta instancia usa Objective-C enlace directo. (Heredado de NSObject) |
| IsProxy |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| Item[NSObject] |
Encapsula un motor de JavaScript. |
| JSGlobalContextRefPtr |
Encapsula un motor de JavaScript. |
| Name |
Encapsula un motor de JavaScript. |
| RetainCount |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| Self |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| Superclass |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| SuperHandle |
Identificador usado para representar los métodos de la clase base para este NSObject. (Heredado de NSObject) |
| VirtualMachine |
Encapsula un motor de JavaScript. |
| Zone |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
Métodos
| Nombre | Description |
|---|---|
| AddObserver(NSObject, NSString, NSKeyValueObservingOptions, IntPtr) |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| AddObserver(NSObject, String, NSKeyValueObservingOptions, IntPtr) |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| AddObserver(NSString, NSKeyValueObservingOptions, Action<NSObservedChange>) |
Registra un objeto para que se observe externamente mediante un método arbitrario. (Heredado de NSObject) |
| AddObserver(String, NSKeyValueObservingOptions, Action<NSObservedChange>) |
Registra un objeto para que se observe externamente mediante un método arbitrario. (Heredado de NSObject) |
| AwakeFromNib() |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| BeginInvokeOnMainThread(Action) |
Invoca la acción especificada de forma asincrónica en el subproceso principal de la interfaz de usuario. (Heredado de NSObject) |
| BeginInvokeOnMainThread(Selector, NSObject) |
Invoca de forma asincrónica el código especificado en el subproceso principal de la interfaz de usuario. (Heredado de NSObject) |
| Bind(NSString, NSObject, String, NSBindingOptions) |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| Bind(NSString, NSObject, String, NSDictionary) |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| CommitEditing() |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| CommitEditing(NSObject, Selector, IntPtr) |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| ConformsToProtocol(NativeHandle) |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| Copy() |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| DangerousAutorelease() |
Llama al selector "autorelease" en este objeto. (Heredado de NSObject) |
| DangerousRelease() |
Llama al selector "release" en este objeto. (Heredado de NSObject) |
| DangerousRetain() |
Llama al selector "retain" en este objeto. (Heredado de NSObject) |
| DidChange(NSKeyValueChange, NSIndexSet, NSString) |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| DidChange(NSString, NSKeyValueSetMutationKind, NSSet) |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| DidChangeValue(String) |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| Dispose() |
Libera los recursos utilizados por el NSObject objeto . (Heredado de NSObject) |
| Dispose(Boolean) |
Libera los recursos usados por este objeto. (Heredado de NSObject) |
| DoesNotRecognizeSelector(Selector) |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| Equals(NSObject) |
Determina si el objeto especificado NSObject es igual al objeto actual NSObject. (Heredado de NSObject) |
| Equals(Object) |
Determina si el objeto especificado es igual al objeto actual NSObject. (Heredado de NSObject) |
| EvaluateScript(String, NSUrl) |
Encapsula un motor de JavaScript. |
| EvaluateScript(String) |
Encapsula un motor de JavaScript. |
| FromJSGlobalContextRef(IntPtr) |
Encapsula un motor de JavaScript. |
| GetBindingInfo(NSString) |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| GetBindingOptionDescriptions(NSString) |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| GetBindingValueClass(NSString) |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| GetDictionaryOfValuesFromKeys(NSString[]) |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| GetHashCode() |
Genera un código hash para la instancia actual. (Heredado de NSObject) |
| GetMethodForSelector(Selector) |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| GetNativeHash() |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| Init() |
Inicializa el objeto llamando al método Objective-C |
| InitializeHandle(NativeHandle, String) |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| InitializeHandle(NativeHandle) |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| Invoke(Action, Double) |
Invoca la acción especificada después del retraso especificado. (Heredado de NSObject) |
| Invoke(Action, TimeSpan) |
Invoca la acción especificada después del retraso especificado. (Heredado de NSObject) |
| InvokeOnMainThread(Action) |
Invoca la acción especificada de forma sincrónica en el subproceso principal de la interfaz de usuario. (Heredado de NSObject) |
| InvokeOnMainThread(Selector, NSObject) |
Invoca sincrónicamente el código especificado en el subproceso principal de la interfaz de usuario. (Heredado de NSObject) |
| IsEqual(NSObject) |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| IsKindOfClass(Class) |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| IsMemberOfClass(Class) |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| MarkDirty() |
Promueve un objeto del mismo nivel normal (IsDirectBinding es true) en un objeto toggleref. (Heredado de NSObject) |
| MutableCopy() |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| ObjectDidEndEditing(NSObject) |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| ObserveValue(NSString, NSObject, NSDictionary, IntPtr) |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| PerformSelector(Selector, NSObject, Double, NSString[]) |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| PerformSelector(Selector, NSObject, Double) |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| PerformSelector(Selector, NSObject, NSObject) |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| PerformSelector(Selector, NSObject) |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| PerformSelector(Selector, NSThread, NSObject, Boolean, NSString[]) |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| PerformSelector(Selector, NSThread, NSObject, Boolean) |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| PerformSelector(Selector) |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| PrepareForInterfaceBuilder() |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| RemoveObserver(NSObject, NSString, IntPtr) |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| RemoveObserver(NSObject, NSString) |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| RemoveObserver(NSObject, String, IntPtr) |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| RemoveObserver(NSObject, String) |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| RespondsToSelector(Selector) |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| SetNilValueForKey(NSString) |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| SetValueForKey(NSObject, NSString) |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| SetValueForKeyPath(NativeHandle, NSString) |
Establece el valor de la propiedad identificada por una ruta de acceso de clave determinada a un valor determinado. (Heredado de NSObject) |
| SetValueForKeyPath(NSObject, NSString) |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| SetValueForUndefinedKey(NSObject, NSString) |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| SetValuesForKeysWithDictionary(NSDictionary) |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| ToString() |
Devuelve una representación de cadena del valor de la instancia actual. (Heredado de NSObject) |
| Unbind(NSString) |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| ValueForKey(NSString) |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| ValueForKeyPath(NSString) |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| ValueForUndefinedKey(NSString) |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| WillChange(NSKeyValueChange, NSIndexSet, NSString) |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| WillChange(NSString, NSKeyValueSetMutationKind, NSSet) |
Encapsula un motor de JavaScript. (Heredado de NSObject) |
| WillChangeValue(String) |
Encapsula un motor de JavaScript. (Heredado de NSObject) |