JSContext Classe

Definição

Encapsula um mecanismo JavaScript.

[Foundation.Register("JSContext", true)]
public class JSContext : Foundation.NSObject
[<Foundation.Register("JSContext", true)>]
type JSContext = class
    inherit NSObject
Herança
JSContext
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:

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 MyJSExporter objeto que, conforme descrito acima, implementa o IMyJSVisibleProtocol;:
  • 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 init .

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

Métodos de Extensão

Nome Description
AcceptsPreviewPanelControl(NSObject, QLPreviewPanel)

Encapsula um mecanismo JavaScript.

AccessibilityHitTest(NSObject, CGPoint, UIEvent)

Encapsula um mecanismo JavaScript.

BeginPreviewPanelControl(NSObject, QLPreviewPanel)

Encapsula um mecanismo JavaScript.

BrowserAccessibilityDeleteTextAtCursor(NSObject, IntPtr)

Encapsula um mecanismo JavaScript.

BrowserAccessibilityInsertTextAtCursor(NSObject, String)

Encapsula um mecanismo JavaScript.

EndPreviewPanelControl(NSObject, QLPreviewPanel)

Encapsula um mecanismo JavaScript.

GetAccessibilityCustomRotors(NSObject)

Obtém a matriz de UIAccessibilityCustomRotor objetos apropriada para this o objeto.

GetAccessibilityLineEndPositionFromCurrentSelection(NSObject)

Encapsula um mecanismo JavaScript.

GetAccessibilityLineRangeForPosition(NSObject, IntPtr)

Encapsula um mecanismo JavaScript.

GetAccessibilityLineStartPositionFromCurrentSelection(NSObject)

Encapsula um mecanismo JavaScript.

GetAccessibilityNextTextNavigationElement(NSObject)

Encapsula um mecanismo JavaScript.

GetAccessibilityNextTextNavigationElementBlock(NSObject)

Encapsula um mecanismo JavaScript.

GetAccessibilityPreviousTextNavigationElement(NSObject)

Encapsula um mecanismo JavaScript.

GetAccessibilityPreviousTextNavigationElementBlock(NSObject)

Encapsula um mecanismo JavaScript.

GetAccessibilityTextInputResponder(NSObject)

Encapsula um mecanismo JavaScript.

GetAccessibilityTextInputResponderHandler(NSObject)

Encapsula um mecanismo JavaScript.

GetBrowserAccessibilityAttributedValue(NSObject, NSRange)

Encapsula um mecanismo JavaScript.

GetBrowserAccessibilityContainerType(NSObject)

Encapsula um mecanismo JavaScript.

GetBrowserAccessibilityCurrentStatus(NSObject)

Encapsula um mecanismo JavaScript.

GetBrowserAccessibilityHasDomFocus(NSObject)

Encapsula um mecanismo JavaScript.

GetBrowserAccessibilityIsRequired(NSObject)

Encapsula um mecanismo JavaScript.

GetBrowserAccessibilityPressedState(NSObject)

Encapsula um mecanismo JavaScript.

GetBrowserAccessibilityRoleDescription(NSObject)

Encapsula um mecanismo JavaScript.

GetBrowserAccessibilitySelectedTextRange(NSObject)

Encapsula um mecanismo JavaScript.

GetBrowserAccessibilitySortDirection(NSObject)

Encapsula um mecanismo JavaScript.

GetBrowserAccessibilityValue(NSObject, NSRange)

Encapsula um mecanismo JavaScript.

GetDebugDescription(INSObjectProtocol)

Encapsula um mecanismo JavaScript.

GetHandle(INativeObject)

Encapsula um mecanismo JavaScript.

GetNonNullHandle(INativeObject, String)

Encapsula um mecanismo JavaScript.

GetValidModes(NSObject, NSFontPanel)

Encapsula um mecanismo JavaScript.

ObjectDidBeginEditing(NSObject, INSEditor)

Encapsula um mecanismo JavaScript.

ObjectDidEndEditing(NSObject, INSEditor)

Encapsula um mecanismo JavaScript.

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

Encapsula um mecanismo JavaScript.

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

Encapsula um mecanismo JavaScript.

SetAccessibilityCustomRotors(NSObject, UIAccessibilityCustomRotor[])

Define a matriz de UIAccessibilityCustomRotor objetos apropriada para this o objeto.

SetAccessibilityNextTextNavigationElement(NSObject, NSObject)

Encapsula um mecanismo JavaScript.

SetAccessibilityNextTextNavigationElementBlock(NSObject, AXObjectReturnBlock)

Encapsula um mecanismo JavaScript.

SetAccessibilityPreviousTextNavigationElement(NSObject, NSObject)

Encapsula um mecanismo JavaScript.

SetAccessibilityPreviousTextNavigationElementBlock(NSObject, AXObjectReturnBlock)

Encapsula um mecanismo JavaScript.

SetAccessibilityTextInputResponder(NSObject, IUITextInput)

Encapsula um mecanismo JavaScript.

SetAccessibilityTextInputResponderHandler(NSObject, UITextInputReturnHandler)

Encapsula um mecanismo JavaScript.

SetBrowserAccessibilityContainerType(NSObject, BEAccessibilityContainerType)

Encapsula um mecanismo JavaScript.

SetBrowserAccessibilityCurrentStatus(NSObject, String)

Encapsula um mecanismo JavaScript.

SetBrowserAccessibilityHasDomFocus(NSObject, Boolean)

Encapsula um mecanismo JavaScript.

SetBrowserAccessibilityIsRequired(NSObject, Boolean)

Encapsula um mecanismo JavaScript.

SetBrowserAccessibilityPressedState(NSObject, BEAccessibilityPressedState)

Encapsula um mecanismo JavaScript.

SetBrowserAccessibilityRoleDescription(NSObject, String)

Encapsula um mecanismo JavaScript.

SetBrowserAccessibilitySelectedTextRange(NSObject, NSRange)

Encapsula um mecanismo JavaScript.

SetBrowserAccessibilitySortDirection(NSObject, String)

Encapsula um mecanismo JavaScript.

SetSharedObservers(NSObject, NSKeyValueSharedObserversSnapshot)

Encapsula um mecanismo JavaScript.

ValidateToolbarItem(NSObject, NSToolbarItem)

Encapsula um mecanismo JavaScript.

Aplica-se a

Confira também