Idioma

JSContext Classe

Definição

Encapsula um motor JavaScript.

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

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

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

Métodos da Extensão

Nome Descrição
AcceptsPreviewPanelControl(NSObject, QLPreviewPanel)

Encapsula um motor JavaScript.

AccessibilityHitTest(NSObject, CGPoint, UIEvent)

Encapsula um motor JavaScript.

BeginPreviewPanelControl(NSObject, QLPreviewPanel)

Encapsula um motor JavaScript.

BrowserAccessibilityDeleteTextAtCursor(NSObject, IntPtr)

Encapsula um motor JavaScript.

BrowserAccessibilityInsertTextAtCursor(NSObject, String)

Encapsula um motor JavaScript.

EndPreviewPanelControl(NSObject, QLPreviewPanel)

Encapsula um motor JavaScript.

GetAccessibilityCustomRotors(NSObject)

Obtém o array de UIAccessibilityCustomRotor objetos apropriado para o this objeto.

GetAccessibilityLineEndPositionFromCurrentSelection(NSObject)

Encapsula um motor JavaScript.

GetAccessibilityLineRangeForPosition(NSObject, IntPtr)

Encapsula um motor JavaScript.

GetAccessibilityLineStartPositionFromCurrentSelection(NSObject)

Encapsula um motor JavaScript.

GetAccessibilityNextTextNavigationElement(NSObject)

Encapsula um motor JavaScript.

GetAccessibilityNextTextNavigationElementBlock(NSObject)

Encapsula um motor JavaScript.

GetAccessibilityPreviousTextNavigationElement(NSObject)

Encapsula um motor JavaScript.

GetAccessibilityPreviousTextNavigationElementBlock(NSObject)

Encapsula um motor JavaScript.

GetAccessibilityTextInputResponder(NSObject)

Encapsula um motor JavaScript.

GetAccessibilityTextInputResponderHandler(NSObject)

Encapsula um motor JavaScript.

GetBrowserAccessibilityAttributedValue(NSObject, NSRange)

Encapsula um motor JavaScript.

GetBrowserAccessibilityContainerType(NSObject)

Encapsula um motor JavaScript.

GetBrowserAccessibilityCurrentStatus(NSObject)

Encapsula um motor JavaScript.

GetBrowserAccessibilityDetailsElements(NSObject)

Encapsula um motor JavaScript.

GetBrowserAccessibilityHasDomFocus(NSObject)

Encapsula um motor JavaScript.

GetBrowserAccessibilityImageData(NSObject, NSDictionary)

Encapsula um motor JavaScript.

GetBrowserAccessibilityImageDataSize(NSObject)

Encapsula um motor JavaScript.

GetBrowserAccessibilityIsRequired(NSObject)

Encapsula um motor JavaScript.

GetBrowserAccessibilityKeyboardShortcuts(NSObject)

Encapsula um motor JavaScript.

GetBrowserAccessibilityOrientation(NSObject)

Encapsula um motor JavaScript.

GetBrowserAccessibilityPressedState(NSObject)

Encapsula um motor JavaScript.

GetBrowserAccessibilityRoleDescription(NSObject)

Encapsula um motor JavaScript.

GetBrowserAccessibilitySelectedTextRange(NSObject)

Encapsula um motor JavaScript.

GetBrowserAccessibilitySortDirection(NSObject)

Encapsula um motor JavaScript.

GetBrowserAccessibilityValue(NSObject, NSRange)

Encapsula um motor JavaScript.

GetDebugDescription(INSObjectProtocol)

Encapsula um motor JavaScript.

GetHandle(INativeObject)

Encapsula um motor JavaScript.

GetNonNullHandle(INativeObject, String)

Encapsula um motor JavaScript.

GetValidModes(NSObject, NSFontPanel)

Encapsula um motor JavaScript.

ObjectDidBeginEditing(NSObject, INSEditor)

Encapsula um motor JavaScript.

ObjectDidEndEditing(NSObject, INSEditor)

Encapsula um motor JavaScript.

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

Encapsula um motor JavaScript.

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

Encapsula um motor JavaScript.

SetAccessibilityCustomRotors(NSObject, UIAccessibilityCustomRotor[])

Define o array de UIAccessibilityCustomRotor objetos apropriado para o this objeto.

SetAccessibilityNextTextNavigationElement(NSObject, NSObject)

Encapsula um motor JavaScript.

SetAccessibilityNextTextNavigationElementBlock(NSObject, AXObjectReturnBlock)

Encapsula um motor JavaScript.

SetAccessibilityPreviousTextNavigationElement(NSObject, NSObject)

Encapsula um motor JavaScript.

SetAccessibilityPreviousTextNavigationElementBlock(NSObject, AXObjectReturnBlock)

Encapsula um motor JavaScript.

SetAccessibilityTextInputResponder(NSObject, IUITextInput)

Encapsula um motor JavaScript.

SetAccessibilityTextInputResponderHandler(NSObject, UITextInputReturnHandler)

Encapsula um motor JavaScript.

SetBrowserAccessibilityContainerType(NSObject, BEAccessibilityContainerType)

Encapsula um motor JavaScript.

SetBrowserAccessibilityCurrentStatus(NSObject, String)

Encapsula um motor JavaScript.

SetBrowserAccessibilityDetailsElements(NSObject, NSObject[])

Encapsula um motor JavaScript.

SetBrowserAccessibilityHasDomFocus(NSObject, Boolean)

Encapsula um motor JavaScript.

SetBrowserAccessibilityIsRequired(NSObject, Boolean)

Encapsula um motor JavaScript.

SetBrowserAccessibilityKeyboardShortcuts(NSObject, String)

Encapsula um motor JavaScript.

SetBrowserAccessibilityOrientation(NSObject, BEAccessibilityOrientation)

Encapsula um motor JavaScript.

SetBrowserAccessibilityPressedState(NSObject, BEAccessibilityPressedState)

Encapsula um motor JavaScript.

SetBrowserAccessibilityRoleDescription(NSObject, String)

Encapsula um motor JavaScript.

SetBrowserAccessibilitySelectedTextRange(NSObject, NSRange)

Encapsula um motor JavaScript.

SetBrowserAccessibilitySortDirection(NSObject, String)

Encapsula um motor JavaScript.

SetSharedObservers(NSObject, NSKeyValueSharedObserversSnapshot)

Encapsula um motor JavaScript.

ValidateToolbarItem(NSObject, NSToolbarItem)

Encapsula um motor JavaScript.

Aplica-se a

Consulte também