JSContext Classe
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Encapsula um motor JavaScript.
[Foundation.Register("JSContext", true)]
public class JSContext : Foundation.NSObject
[<Foundation.Register("JSContext", true)>]
type JSContext = class
inherit NSObject
- Herança
- Atributos
Observações
O JSContext é o objeto central do JavaScriptCore espaço de nomes. Mantém JSContext um ambiente JavaScript (manipulado pela propriedade Item[NSObject] ) e avalia scripts com o EvaluateScript(String, NSUrl) método.
Os programadores de aplicações querem frequentemente atribuir um delegado à propriedade ExceptionHandler para obter acesso, no seu código Xamarin.iOS, às exceções levantadas no domínio JavaScript.
O exemplo seguinte mostra o uso básico de JSContext. O contexto é instanciado e é atribuído um simples gestor de exceções. Uma das From(NSObject, JSContext) sobrecargas de métodos é usada para atribuir valores às variáveis arg1 JavaScript e arg2. O método EvaluateScript(String, NSUrl) avalia o JavaScript e devolve o resultado, que é convertido novamente num 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();
O JSContext contém o contexto global JavaScript, incluindo variáveis definidas por cálculos JavaScript, como mostrado no seguinte exemplo:
jsContext.EvaluateScript("sum = 2 + 2;");
var four = jsContext[(NSString)"sum"].ToInt32();
Chamar código C# a partir de JavaScript
Os programadores podem estender a IJSExport interface para definir métodos que podem ser chamados a partir do JavaScript. Os programadores devem marcar essa interface com o ProtocolAttribute atributo e devem marcar os métodos chamáveis em JavaScript com o ExportAttribute atributo. Também devem definir a propriedade Registrar MSBuild como "estática" ou "estática gerida" nos ficheiros 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:
-
Define
IMyJSVisibleProtocolcomo extensão IJSExport;: -
Decora
IMyJSVisibleProtocole o seu métodoMyFunccom os ProtocolAttribute atributos e ExportAttribute :: - Implementa a interface:
Para expor o IMyJSVisibleProtocol JavaScript, o programador pode usar código como o seguinte no ViewDidLoad() método do 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á apresentado ao utilizador final;:
- Obtém o JSContext do UIWebView quadro principal do objeto;:
- Adiciona um gestor de exceções para que o problema JavaScript seja visível para o projeto Xamarin; :
-
Instancia um novo
MyJSExporterobjeto que, como descrito acima, implementa oIMyJSVisibleProtocol;: -
Adiciona esse objeto ao JSContext nome
myCSharpObject;: - Carrega um ficheiro HTML (ver abaixo):
Finalmente, o ficheiro HTML que é carregado no UIWebView e no qual JSContext o MyJSExporter objeto foi colocado pode aceder ao objeto a partir 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# de modo a que seja visível para JavaScript, o programador deve adicionar o --registrar:static argumento aos argumentos usados por mtouch. No Xamarin Studio, isto é feito no diálogo Project Options, no painel Build Options / iOS Build:

Outra técnica para chamar código C# a partir do Xamarin.iOS é usar REST, como mostrado no seguinte:
No código JavaScript, use XMLHttpRequest técnicas JSON padrão para publicar e analisar uma consulta para um serviço REST a correr 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>
Na aplicação, use HttpListener para ouvir e responder a esse pedido:
//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();
}
Finalmente, uma terceira técnica é sondar para JSContext um flag definido por um cálculo JavaScript.
Construtores
| Nome | Descrição |
|---|---|
| JSContext() |
Encapsula um motor JavaScript. |
| JSContext(JSVirtualMachine) |
Encapsula um motor JavaScript. |
| JSContext(NativeHandle) |
Um construtor usado ao criar representações geridas de objetos não geridos. Chamado pelo tempo de execução. |
| JSContext(NSObjectFlag) |
Construtor para chamar as classes derivadas para saltar a inicialização e simplesmente alocar o objeto. |
Propriedades
| Nome | Descrição |
|---|---|
| AccessibilityAttributedUserInputLabels |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| AccessibilityRespondsToUserInteraction |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| AccessibilityTextualContext |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| AccessibilityUserInputLabels |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| Class |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| ClassHandle |
A Objective-C conta da classe para esta aula. |
| CurrentArguments |
Encapsula um motor JavaScript. |
| CurrentCallee |
Encapsula um motor JavaScript. |
| CurrentContext |
Encapsula um motor JavaScript. |
| CurrentThis |
Encapsula um motor JavaScript. |
| DebugDescription |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| Description |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| Exception |
Encapsula um motor JavaScript. |
| ExceptionHandler |
Encapsula um motor JavaScript. |
| ExposedBindings |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| GlobalObject |
Encapsula um motor JavaScript. |
| Handle |
Handle (apontador) para a representação do objeto não gerido. (Herdado de NSObject) |
| Inspectable |
Encapsula um motor JavaScript. |
| IsDirectBinding |
Recebe ou define um valor que indica se esta instância utiliza ligação direta Objective-C. (Herdado de NSObject) |
| IsProxy |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| Item[NSObject] |
Encapsula um motor JavaScript. |
| JSGlobalContextRefPtr |
Encapsula um motor JavaScript. |
| Name |
Encapsula um motor JavaScript. |
| RetainCount |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| Self |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| Superclass |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| SuperHandle |
Handle usado para representar os métodos na classe base para esta NSObject. (Herdado de NSObject) |
| VirtualMachine |
Encapsula um motor JavaScript. |
| Zone |
Encapsula um motor JavaScript. (Herdado de NSObject) |
Métodos
| Nome | Descrição |
|---|---|
| AddObserver(NSObject, NSString, NSKeyValueObservingOptions, IntPtr) |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| AddObserver(NSObject, String, NSKeyValueObservingOptions, IntPtr) |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| AddObserver(NSString, NSKeyValueObservingOptions, Action<NSObservedChange>) |
Regista um objeto para ser observado externamente usando um método arbitrário. (Herdado de NSObject) |
| AddObserver(String, NSKeyValueObservingOptions, Action<NSObservedChange>) |
Regista um objeto para ser observado externamente usando um método arbitrário. (Herdado de NSObject) |
| AwakeFromNib() |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| BeginInvokeOnMainThread(Action) |
Invoca a ação especificada de forma assíncrona na thread principal da interface. (Herdado de NSObject) |
| BeginInvokeOnMainThread(Selector, NSObject) |
Invoca assíncronamente o código especificado na thread principal da interface. (Herdado de NSObject) |
| Bind(NSString, NSObject, String, NSBindingOptions) |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| Bind(NSString, NSObject, String, NSDictionary) |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| CommitEditing() |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| CommitEditing(NSObject, Selector, IntPtr) |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| ConformsToProtocol(NativeHandle) |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| Copy() |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| DangerousAutorelease() |
Chama o seletor 'autorelease' neste objeto. (Herdado de NSObject) |
| DangerousRelease() |
Chama o seletor 'release' neste objeto. (Herdado de NSObject) |
| DangerousRetain() |
Chama o seletor de 'retenção' neste objeto. (Herdado de NSObject) |
| DidChange(NSKeyValueChange, NSIndexSet, NSString) |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| DidChange(NSString, NSKeyValueSetMutationKind, NSSet) |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| DidChangeValue(String) |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| Dispose() |
Liberta os recursos usados pelo NSObject objeto. (Herdado de NSObject) |
| Dispose(Boolean) |
Liberta os recursos usados por este objeto. (Herdado de NSObject) |
| DoesNotRecognizeSelector(Selector) |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| Equals(NSObject) |
Determina se o especificado NSObject é igual à corrente NSObject. (Herdado de NSObject) |
| Equals(Object) |
Determina se o objeto especificado é igual à corrente NSObject. (Herdado de NSObject) |
| EvaluateScript(String, NSUrl) |
Encapsula um motor JavaScript. |
| EvaluateScript(String) |
Encapsula um motor JavaScript. |
| FromJSGlobalContextRef(IntPtr) |
Encapsula um motor JavaScript. |
| GetBindingInfo(NSString) |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| GetBindingOptionDescriptions(NSString) |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| GetBindingValueClass(NSString) |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| GetDictionaryOfValuesFromKeys(NSString[]) |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| GetHashCode() |
Gera um código de hash para a instância atual. (Herdado de NSObject) |
| GetMethodForSelector(Selector) |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| GetNativeHash() |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| Init() |
Inicializa o objeto chamando o método Objective-C |
| InitializeHandle(NativeHandle, String, Boolean) |
Inicializa a Handle propriedade com o resultado de um inicializador nativo. (Herdado de NSObject) |
| InitializeHandle(NativeHandle, String) |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| InitializeHandle(NativeHandle) |
Encapsula um motor 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 tópico principal da interface. (Herdado de NSObject) |
| InvokeOnMainThread(Selector, NSObject) |
Invoca de forma síncrona o código especificado na thread principal da interface. (Herdado de NSObject) |
| IsEqual(NSObject) |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| IsKindOfClass(Class) |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| IsMemberOfClass(Class) |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| MarkDirty() |
Promove um objeto peer normal (IsDirectBinding é verdade) num objeto toggleref. (Herdado de NSObject) |
| MutableCopy() |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| ObjectDidEndEditing(NSObject) |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| ObserveValue(NSString, NSObject, NSDictionary, IntPtr) |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| PerformSelector(Selector, NSObject, Double, NSString[]) |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| PerformSelector(Selector, NSObject, Double) |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| PerformSelector(Selector, NSObject, NSObject) |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| PerformSelector(Selector, NSObject) |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| PerformSelector(Selector, NSThread, NSObject, Boolean, NSString[]) |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| PerformSelector(Selector, NSThread, NSObject, Boolean) |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| PerformSelector(Selector) |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| PrepareForInterfaceBuilder() |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| RemoveObserver(NSObject, NSString, IntPtr) |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| RemoveObserver(NSObject, NSString) |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| RemoveObserver(NSObject, String, IntPtr) |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| RemoveObserver(NSObject, String) |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| RespondsToSelector(Selector) |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| SetNilValueForKey(NSString) |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| SetValueForKey(NSObject, NSString) |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| SetValueForKeyPath(NativeHandle, NSString) |
Define o valor da propriedade identificada por um determinado caminho de chave a um determinado valor. (Herdado de NSObject) |
| SetValueForKeyPath(NSObject, NSString) |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| SetValueForUndefinedKey(NSObject, NSString) |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| SetValuesForKeysWithDictionary(NSDictionary) |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| ToString() |
Devolve uma representação de cadeia do valor da instância atual. (Herdado de NSObject) |
| Unbind(NSString) |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| ValueForKey(NSString) |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| ValueForKeyPath(NSString) |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| ValueForUndefinedKey(NSString) |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| WillChange(NSKeyValueChange, NSIndexSet, NSString) |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| WillChange(NSString, NSKeyValueSetMutationKind, NSSet) |
Encapsula um motor JavaScript. (Herdado de NSObject) |
| WillChangeValue(String) |
Encapsula um motor JavaScript. (Herdado de NSObject) |