JSContext Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Encapsula um mecanismo JavaScript.
[Foundation.Register("JSContext", true)]
public class JSContext : Foundation.NSObject
[<Foundation.Register("JSContext", true)>]
type JSContext = class
inherit NSObject
- Herança
- Atributos
Comentários
O JSContext é o objeto central do JavaScriptCore namespace. O JSContext mantém um ambiente JavaScript (manipulado pela Item[NSObject] propriedade) e avalia scripts com o EvaluateScript(String, NSUrl) método.
Os desenvolvedores de aplicativos geralmente desejam atribuir um delegado à propriedade ExceptionHandler para obter acesso, em seu código Xamarin.iOS, de exceções geradas no realm JavaScript.
O exemplo a seguir mostra o uso básico de JSContext. O contexto é instanciado e um manipulador de exceção simples é atribuído. Uma das sobrecargas do From(NSObject, JSContext) método é usada para atribuir valores às variáveis arg1 JavaScript e arg2. O método EvaluateScript(String, NSUrl) avalia o JavaScript e retorna o resultado, que é convertido novamente em um objeto .NET com o método 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();
Contém JSContext o contexto global do JavaScript, incluindo variáveis definidas por cálculos javaScript, conforme mostrado no exemplo a seguir:
jsContext.EvaluateScript("sum = 2 + 2;");
var four = jsContext[(NSString)"sum"].ToInt32();
Chamando código C# do JavaScript
Os desenvolvedores podem estender a IJSExport interface para definir métodos que podem ser chamados do JavaScript. Os desenvolvedores devem marcar essa interface com o ProtocolAttribute atributo e devem marcar métodos que podem ser chamados por JavaScript com o ExportAttribute atributo. Eles também devem definir a propriedade Registrar MSBuild como "estática" ou "gerenciada-estática" nos arquivos do projeto. Por exemplo:
[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;
}
}
O exemplo acima:
-
IMyJSVisibleProtocolDefine como estendendo IJSExport;: -
IMyJSVisibleProtocolDecora e é o métodoMyFunccom os atributos e ExportAttribute os ProtocolAttribute atributos;: - Implementa a interface:
Para expor o IMyJSVisibleProtocol JavaScript, o desenvolvedor pode usar código como o seguinte no ViewDidLoad() método de seu 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)));
O código C# acima:
- Cria um UIWebView que será exibido para o usuário final;:
- Obtém o JSContext quadro UIWebView principal do objeto;:
- Adds um manipulador de exceção para que o problema do JavaScript fique visível para o projeto Xamarin; :
-
Cria uma instância de um novo
MyJSExporterobjeto que, conforme descrito acima, implementa oIMyJSVisibleProtocol;: -
Adiciona esse objeto ao JSContext nome
myCSharpObject;: - Carrega um arquivo HTML (veja abaixo):
Por fim, o arquivo HTML carregado no UIWebView e em cujo JSContextMyJSExporter objeto foi colocado pode acessar o objeto de dentro do 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 um objeto C# para que ele fique visível para JavaScript, o desenvolvedor deve adicionar o --registrar:static argumento aos argumentos usados por mtouch. No Xamarin Studio, isso é feito na caixa de diálogo Opções do Project, no painel Opções de Build/Build do iOS:

Outra técnica para chamar código C# de Xamarin.iOS é usar REST, conforme mostrado no seguinte:
No código JavaScript, use XMLHttpRequest e as técnicas JSON padrão para postar e analisar uma consulta em um serviço REST em execução no 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>
No aplicativo, use HttpListener para ouvir e responder a essa solicitação:
//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 fim, uma terceira técnica é sondar um JSContext sinalizador definido por um cálculo javaScript.
Construtores
| Nome | Description |
|---|---|
| JSContext() |
Encapsula um mecanismo JavaScript. |
| JSContext(JSVirtualMachine) |
Encapsula um mecanismo JavaScript. |
| JSContext(NativeHandle) |
Um construtor usado ao criar representações gerenciadas de objetos não gerenciados. Chamado pelo runtime. |
| JSContext(NSObjectFlag) |
Construtor para chamar classes derivadas para ignorar a inicialização e apenas alocar o objeto. |
Propriedades
| Nome | Description |
|---|---|
| AccessibilityAttributedUserInputLabels |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| AccessibilityRespondsToUserInteraction |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| AccessibilityTextualContext |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| AccessibilityUserInputLabels |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| Class |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| ClassHandle |
O identificador de classe Objective-C desta classe. |
| CurrentArguments |
Encapsula um mecanismo JavaScript. |
| CurrentCallee |
Encapsula um mecanismo JavaScript. |
| CurrentContext |
Encapsula um mecanismo JavaScript. |
| CurrentThis |
Encapsula um mecanismo JavaScript. |
| DebugDescription |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| Description |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| Exception |
Encapsula um mecanismo JavaScript. |
| ExceptionHandler |
Encapsula um mecanismo JavaScript. |
| ExposedBindings |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| GlobalObject |
Encapsula um mecanismo JavaScript. |
| Handle |
Manipule (ponteiro) para a representação de objeto não gerenciado. (Herdado de NSObject) |
| Inspectable |
Encapsula um mecanismo JavaScript. |
| IsDirectBinding |
Obtém ou define um valor que indica se essa instância usa associação Objective-C direta. (Herdado de NSObject) |
| IsProxy |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| Item[NSObject] |
Encapsula um mecanismo JavaScript. |
| JSGlobalContextRefPtr |
Encapsula um mecanismo JavaScript. |
| Name |
Encapsula um mecanismo JavaScript. |
| RetainCount |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| Self |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| Superclass |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| SuperHandle |
Identificador usado para representar os métodos na classe base para isso NSObject. (Herdado de NSObject) |
| VirtualMachine |
Encapsula um mecanismo JavaScript. |
| Zone |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
Métodos
| Nome | Description |
|---|---|
| AddObserver(NSObject, NSString, NSKeyValueObservingOptions, IntPtr) |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| AddObserver(NSObject, String, NSKeyValueObservingOptions, IntPtr) |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| AddObserver(NSString, NSKeyValueObservingOptions, Action<NSObservedChange>) |
Registra um objeto para ser observado externamente usando um método arbitrário. (Herdado de NSObject) |
| AddObserver(String, NSKeyValueObservingOptions, Action<NSObservedChange>) |
Registra um objeto para ser observado externamente usando um método arbitrário. (Herdado de NSObject) |
| AwakeFromNib() |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| BeginInvokeOnMainThread(Action) |
Invoca a ação especificada de forma assíncrona no thread principal da interface do usuário. (Herdado de NSObject) |
| BeginInvokeOnMainThread(Selector, NSObject) |
Invoca de forma assíncrona o código especificado no thread principal da interface do usuário. (Herdado de NSObject) |
| Bind(NSString, NSObject, String, NSBindingOptions) |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| Bind(NSString, NSObject, String, NSDictionary) |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| CommitEditing() |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| CommitEditing(NSObject, Selector, IntPtr) |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| ConformsToProtocol(NativeHandle) |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| Copy() |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| DangerousAutorelease() |
Chama o seletor 'autorelease' neste objeto. (Herdado de NSObject) |
| DangerousRelease() |
Chama o seletor de "versão" neste objeto. (Herdado de NSObject) |
| DangerousRetain() |
Chama o seletor de 'retenção' nesse objeto. (Herdado de NSObject) |
| DidChange(NSKeyValueChange, NSIndexSet, NSString) |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| DidChange(NSString, NSKeyValueSetMutationKind, NSSet) |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| DidChangeValue(String) |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| Dispose() |
Libera os recursos usados pelo NSObject objeto. (Herdado de NSObject) |
| Dispose(Boolean) |
Libera os recursos usados por esse objeto. (Herdado de NSObject) |
| DoesNotRecognizeSelector(Selector) |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| Equals(NSObject) |
Determina se o especificado NSObject é igual ao atual NSObject. (Herdado de NSObject) |
| Equals(Object) |
Determina se o objeto especificado é igual ao atual NSObject. (Herdado de NSObject) |
| EvaluateScript(String, NSUrl) |
Encapsula um mecanismo JavaScript. |
| EvaluateScript(String) |
Encapsula um mecanismo JavaScript. |
| FromJSGlobalContextRef(IntPtr) |
Encapsula um mecanismo JavaScript. |
| GetBindingInfo(NSString) |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| GetBindingOptionDescriptions(NSString) |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| GetBindingValueClass(NSString) |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| GetDictionaryOfValuesFromKeys(NSString[]) |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| GetHashCode() |
Gera um código hash para a instância atual. (Herdado de NSObject) |
| GetMethodForSelector(Selector) |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| GetNativeHash() |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| Init() |
Inicializa o objeto chamando o método Objective-C |
| InitializeHandle(NativeHandle, String) |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| InitializeHandle(NativeHandle) |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| Invoke(Action, Double) |
Invoca a ação especificada após o atraso especificado. (Herdado de NSObject) |
| Invoke(Action, TimeSpan) |
Invoca a ação especificada após o atraso especificado. (Herdado de NSObject) |
| InvokeOnMainThread(Action) |
Invoca a ação especificada de forma síncrona no thread principal da interface do usuário. (Herdado de NSObject) |
| InvokeOnMainThread(Selector, NSObject) |
Invoca de forma síncrona o código especificado no thread principal da interface do usuário. (Herdado de NSObject) |
| IsEqual(NSObject) |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| IsKindOfClass(Class) |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| IsMemberOfClass(Class) |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| MarkDirty() |
Promove um objeto par regular (IsDirectBinding é true) em um objeto toggleref. (Herdado de NSObject) |
| MutableCopy() |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| ObjectDidEndEditing(NSObject) |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| ObserveValue(NSString, NSObject, NSDictionary, IntPtr) |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| PerformSelector(Selector, NSObject, Double, NSString[]) |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| PerformSelector(Selector, NSObject, Double) |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| PerformSelector(Selector, NSObject, NSObject) |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| PerformSelector(Selector, NSObject) |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| PerformSelector(Selector, NSThread, NSObject, Boolean, NSString[]) |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| PerformSelector(Selector, NSThread, NSObject, Boolean) |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| PerformSelector(Selector) |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| PrepareForInterfaceBuilder() |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| RemoveObserver(NSObject, NSString, IntPtr) |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| RemoveObserver(NSObject, NSString) |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| RemoveObserver(NSObject, String, IntPtr) |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| RemoveObserver(NSObject, String) |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| RespondsToSelector(Selector) |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| SetNilValueForKey(NSString) |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| SetValueForKey(NSObject, NSString) |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| SetValueForKeyPath(NativeHandle, NSString) |
Define o valor da propriedade identificada por um determinado caminho de chave para um determinado valor. (Herdado de NSObject) |
| SetValueForKeyPath(NSObject, NSString) |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| SetValueForUndefinedKey(NSObject, NSString) |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| SetValuesForKeysWithDictionary(NSDictionary) |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| ToString() |
Retorna uma representação de cadeia de caracteres do valor da instância atual. (Herdado de NSObject) |
| Unbind(NSString) |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| ValueForKey(NSString) |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| ValueForKeyPath(NSString) |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| ValueForUndefinedKey(NSString) |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| WillChange(NSKeyValueChange, NSIndexSet, NSString) |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| WillChange(NSString, NSKeyValueSetMutationKind, NSSet) |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |
| WillChangeValue(String) |
Encapsula um mecanismo JavaScript. (Herdado de NSObject) |