JSContext Clase

Definición

Encapsula un motor de JavaScript.

[Foundation.Register("JSContext", true)]
public class JSContext : Foundation.NSObject
[<Foundation.Register("JSContext", true)>]
type JSContext = class
    inherit NSObject
Herencia
JSContext
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 evalúa JavaScript y devuelve el resultado, que se convierte en un objeto .NET con 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:

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 MyJSExporter objeto que, como se ha descrito anteriormente, implementa el IMyJSVisibleProtocolobjeto ;:
  • 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 init .

(Heredado de NSObject)
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)

Métodos de extensión

Nombre Description
AcceptsPreviewPanelControl(NSObject, QLPreviewPanel)

Encapsula un motor de JavaScript.

AccessibilityHitTest(NSObject, CGPoint, UIEvent)

Encapsula un motor de JavaScript.

BeginPreviewPanelControl(NSObject, QLPreviewPanel)

Encapsula un motor de JavaScript.

BrowserAccessibilityDeleteTextAtCursor(NSObject, IntPtr)

Encapsula un motor de JavaScript.

BrowserAccessibilityInsertTextAtCursor(NSObject, String)

Encapsula un motor de JavaScript.

EndPreviewPanelControl(NSObject, QLPreviewPanel)

Encapsula un motor de JavaScript.

GetAccessibilityCustomRotors(NSObject)

Obtiene la matriz de UIAccessibilityCustomRotor objetos adecuados para this el objeto .

GetAccessibilityLineEndPositionFromCurrentSelection(NSObject)

Encapsula un motor de JavaScript.

GetAccessibilityLineRangeForPosition(NSObject, IntPtr)

Encapsula un motor de JavaScript.

GetAccessibilityLineStartPositionFromCurrentSelection(NSObject)

Encapsula un motor de JavaScript.

GetAccessibilityNextTextNavigationElement(NSObject)

Encapsula un motor de JavaScript.

GetAccessibilityNextTextNavigationElementBlock(NSObject)

Encapsula un motor de JavaScript.

GetAccessibilityPreviousTextNavigationElement(NSObject)

Encapsula un motor de JavaScript.

GetAccessibilityPreviousTextNavigationElementBlock(NSObject)

Encapsula un motor de JavaScript.

GetAccessibilityTextInputResponder(NSObject)

Encapsula un motor de JavaScript.

GetAccessibilityTextInputResponderHandler(NSObject)

Encapsula un motor de JavaScript.

GetBrowserAccessibilityAttributedValue(NSObject, NSRange)

Encapsula un motor de JavaScript.

GetBrowserAccessibilityContainerType(NSObject)

Encapsula un motor de JavaScript.

GetBrowserAccessibilityCurrentStatus(NSObject)

Encapsula un motor de JavaScript.

GetBrowserAccessibilityHasDomFocus(NSObject)

Encapsula un motor de JavaScript.

GetBrowserAccessibilityIsRequired(NSObject)

Encapsula un motor de JavaScript.

GetBrowserAccessibilityPressedState(NSObject)

Encapsula un motor de JavaScript.

GetBrowserAccessibilityRoleDescription(NSObject)

Encapsula un motor de JavaScript.

GetBrowserAccessibilitySelectedTextRange(NSObject)

Encapsula un motor de JavaScript.

GetBrowserAccessibilitySortDirection(NSObject)

Encapsula un motor de JavaScript.

GetBrowserAccessibilityValue(NSObject, NSRange)

Encapsula un motor de JavaScript.

GetDebugDescription(INSObjectProtocol)

Encapsula un motor de JavaScript.

GetHandle(INativeObject)

Encapsula un motor de JavaScript.

GetNonNullHandle(INativeObject, String)

Encapsula un motor de JavaScript.

GetValidModes(NSObject, NSFontPanel)

Encapsula un motor de JavaScript.

ObjectDidBeginEditing(NSObject, INSEditor)

Encapsula un motor de JavaScript.

ObjectDidEndEditing(NSObject, INSEditor)

Encapsula un motor de JavaScript.

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

Encapsula un motor de JavaScript.

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

Encapsula un motor de JavaScript.

SetAccessibilityCustomRotors(NSObject, UIAccessibilityCustomRotor[])

Establece la matriz de UIAccessibilityCustomRotor objetos adecuados para this el objeto .

SetAccessibilityNextTextNavigationElement(NSObject, NSObject)

Encapsula un motor de JavaScript.

SetAccessibilityNextTextNavigationElementBlock(NSObject, AXObjectReturnBlock)

Encapsula un motor de JavaScript.

SetAccessibilityPreviousTextNavigationElement(NSObject, NSObject)

Encapsula un motor de JavaScript.

SetAccessibilityPreviousTextNavigationElementBlock(NSObject, AXObjectReturnBlock)

Encapsula un motor de JavaScript.

SetAccessibilityTextInputResponder(NSObject, IUITextInput)

Encapsula un motor de JavaScript.

SetAccessibilityTextInputResponderHandler(NSObject, UITextInputReturnHandler)

Encapsula un motor de JavaScript.

SetBrowserAccessibilityContainerType(NSObject, BEAccessibilityContainerType)

Encapsula un motor de JavaScript.

SetBrowserAccessibilityCurrentStatus(NSObject, String)

Encapsula un motor de JavaScript.

SetBrowserAccessibilityHasDomFocus(NSObject, Boolean)

Encapsula un motor de JavaScript.

SetBrowserAccessibilityIsRequired(NSObject, Boolean)

Encapsula un motor de JavaScript.

SetBrowserAccessibilityPressedState(NSObject, BEAccessibilityPressedState)

Encapsula un motor de JavaScript.

SetBrowserAccessibilityRoleDescription(NSObject, String)

Encapsula un motor de JavaScript.

SetBrowserAccessibilitySelectedTextRange(NSObject, NSRange)

Encapsula un motor de JavaScript.

SetBrowserAccessibilitySortDirection(NSObject, String)

Encapsula un motor de JavaScript.

SetSharedObservers(NSObject, NSKeyValueSharedObserversSnapshot)

Encapsula un motor de JavaScript.

ValidateToolbarItem(NSObject, NSToolbarItem)

Encapsula un motor de JavaScript.

Se aplica a

Consulte también