JSContext Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Incapsula un motore JavaScript.
[Foundation.Register("JSContext", true)]
public class JSContext : Foundation.NSObject
[<Foundation.Register("JSContext", true)>]
type JSContext = class
inherit NSObject
- Ereditarietà
- Attributi
Commenti
JSContext è l'oggetto centrale dello spazio dei JavaScriptCore nomi . mantiene JSContext un ambiente JavaScript (modificato dalla Item[NSObject] proprietà ) e valuta gli script con il EvaluateScript(String, NSUrl) metodo .
Gli sviluppatori di applicazioni spesso vogliono assegnare un delegato alla proprietà ExceptionHandler per ottenere l'accesso, nel codice Xamarin.iOS, delle eccezioni generate nell'area di autenticazione JavaScript.
Nell'esempio seguente viene illustrato l'uso di base di JSContext. Viene creata un'istanza del contesto e viene assegnato un gestore di eccezioni semplice. Uno degli overload del From(NSObject, JSContext) metodo viene usato per assegnare valori alle variabili arg1 JavaScript e arg2. Il metodo
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 il contesto JavaScript globale, incluse le variabili impostate dai calcoli JavaScript, come illustrato nell'esempio seguente:
jsContext.EvaluateScript("sum = 2 + 2;");
var four = jsContext[(NSString)"sum"].ToInt32();
Chiamata di codice C# da JavaScript
Gli sviluppatori possono estendere l'interfaccia IJSExport per definire metodi che possono essere chiamati da JavaScript. Gli sviluppatori devono contrassegnare l'interfaccia con l'attributo ProtocolAttribute e devono contrassegnare i metodi chiamabili javaScript con l'attributo ExportAttribute . È inoltre necessario impostare la proprietà Registrar MSBuild su "static" o "managed-static" nei file di progetto. Per esempio:
[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;
}
}
L'esempio precedente:
-
Definisce
IMyJSVisibleProtocolcome estensione IJSExport;: -
Decora
IMyJSVisibleProtocoled è il metodoMyFunccon gli ProtocolAttribute attributi e ExportAttribute ;: - Implementa l'interfaccia :
Per esporre a IMyJSVisibleProtocol JavaScript, lo sviluppatore può usare codice simile al seguente nel ViewDidLoad() metodo del relativo 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)));
Il codice C# precedente:
- Crea un oggetto UIWebView che verrà visualizzato all'utente finale;:
- Ottiene l'oggetto JSContext della UIWebView cornice principale dell'oggetto;:
- Aggiunge un gestore eccezioni in modo che i problemi di JavaScript siano visibili al progetto Xamarin; :
-
Crea un'istanza di un nuovo
MyJSExporteroggetto che, come descritto in precedenza, implementa ;IMyJSVisibleProtocol: -
Aggiunge l'oggetto JSContext a con il nome
myCSharpObject;: - Carica un file HTML (vedere di seguito):
Infine, il file HTML caricato in UIWebView e in cui JSContext è stato inserito l'oggetto MyJSExporter può accedere all'oggetto dall'interno di 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>
Per esportare un oggetto C# in modo che sia visibile in JavaScript, lo sviluppatore deve aggiungere l'argomento --registrar:static agli argomenti usati da mtouch. In Xamarin Studio questa operazione viene eseguita nella finestra di dialogo Opzioni Project, nel riquadro Opzioni di compilazione/Compilazione iOS:

Un'altra tecnica per chiamare il codice C# da Xamarin.iOS consiste nell'usare REST, come illustrato di seguito:
Nel codice JavaScript usare XMLHttpRequest e tecniche JSON standard per pubblicare e analizzare una query in un servizio REST in esecuzione nel dispositivo locale:
<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>
Nell'applicazione usare HttpListener per ascoltare e rispondere a tale richiesta:
//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();
}
Infine, una terza tecnica consiste nel eseguire il polling di JSContext per un flag impostato da un calcolo JavaScript.
Costruttori
| Nome | Descrizione |
|---|---|
| JSContext() |
Incapsula un motore JavaScript. |
| JSContext(JSVirtualMachine) |
Incapsula un motore JavaScript. |
| JSContext(NativeHandle) |
Costruttore utilizzato durante la creazione di rappresentazioni gestite di oggetti non gestiti. Chiamato dal runtime. |
| JSContext(NSObjectFlag) |
Costruttore da chiamare sulle classi derivate per ignorare l'inizializzazione e semplicemente allocare l'oggetto. |
Proprietà
| Nome | Descrizione |
|---|---|
| AccessibilityAttributedUserInputLabels |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| AccessibilityRespondsToUserInteraction |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| AccessibilityTextualContext |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| AccessibilityUserInputLabels |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| Class |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| ClassHandle |
Handle della classe Objective-C per questa classe. |
| CurrentArguments |
Incapsula un motore JavaScript. |
| CurrentCallee |
Incapsula un motore JavaScript. |
| CurrentContext |
Incapsula un motore JavaScript. |
| CurrentThis |
Incapsula un motore JavaScript. |
| DebugDescription |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| Description |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| Exception |
Incapsula un motore JavaScript. |
| ExceptionHandler |
Incapsula un motore JavaScript. |
| ExposedBindings |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| GlobalObject |
Incapsula un motore JavaScript. |
| Handle |
Handle (puntatore) alla rappresentazione dell'oggetto non gestito. (Ereditato da NSObject) |
| Inspectable |
Incapsula un motore JavaScript. |
| IsDirectBinding |
Ottiene o imposta un valore che indica se questa istanza utilizza l'associazione diretta Objective-C. (Ereditato da NSObject) |
| IsProxy |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| Item[NSObject] |
Incapsula un motore JavaScript. |
| JSGlobalContextRefPtr |
Incapsula un motore JavaScript. |
| Name |
Incapsula un motore JavaScript. |
| RetainCount |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| Self |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| Superclass |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| SuperHandle |
Handle utilizzato per rappresentare i metodi nella classe di base per questo NSObjectoggetto . (Ereditato da NSObject) |
| VirtualMachine |
Incapsula un motore JavaScript. |
| Zone |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
Metodi
| Nome | Descrizione |
|---|---|
| AddObserver(NSObject, NSString, NSKeyValueObservingOptions, IntPtr) |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| AddObserver(NSObject, String, NSKeyValueObservingOptions, IntPtr) |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| AddObserver(NSString, NSKeyValueObservingOptions, Action<NSObservedChange>) |
Registra un oggetto per essere osservato esternamente usando un metodo arbitrario. (Ereditato da NSObject) |
| AddObserver(String, NSKeyValueObservingOptions, Action<NSObservedChange>) |
Registra un oggetto per essere osservato esternamente usando un metodo arbitrario. (Ereditato da NSObject) |
| AwakeFromNib() |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| BeginInvokeOnMainThread(Action) |
Richiama l'azione specificata in modo asincrono nel thread principale dell'interfaccia utente. (Ereditato da NSObject) |
| BeginInvokeOnMainThread(Selector, NSObject) |
Richiama in modo asincrono il codice specificato nel thread principale dell'interfaccia utente. (Ereditato da NSObject) |
| Bind(NSString, NSObject, String, NSBindingOptions) |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| Bind(NSString, NSObject, String, NSDictionary) |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| CommitEditing() |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| CommitEditing(NSObject, Selector, IntPtr) |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| ConformsToProtocol(NativeHandle) |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| Copy() |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| DangerousAutorelease() |
Chiama il selettore 'autorelease' su questo oggetto. (Ereditato da NSObject) |
| DangerousRelease() |
Chiama il selettore 'release' su questo oggetto. (Ereditato da NSObject) |
| DangerousRetain() |
Chiama il selettore 'retain' su questo oggetto. (Ereditato da NSObject) |
| DidChange(NSKeyValueChange, NSIndexSet, NSString) |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| DidChange(NSString, NSKeyValueSetMutationKind, NSSet) |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| DidChangeValue(String) |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| Dispose() |
Rilascia le risorse utilizzate dall'oggetto NSObject . (Ereditato da NSObject) |
| Dispose(Boolean) |
Rilascia le risorse usate da questo oggetto. (Ereditato da NSObject) |
| DoesNotRecognizeSelector(Selector) |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| Equals(NSObject) |
Determina se l'oggetto specificato NSObject è uguale all'oggetto corrente NSObject. (Ereditato da NSObject) |
| Equals(Object) |
Determina se l'oggetto specificato è uguale all'oggetto corrente NSObject. (Ereditato da NSObject) |
| EvaluateScript(String, NSUrl) |
Incapsula un motore JavaScript. |
| EvaluateScript(String) |
Incapsula un motore JavaScript. |
| FromJSGlobalContextRef(IntPtr) |
Incapsula un motore JavaScript. |
| GetBindingInfo(NSString) |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| GetBindingOptionDescriptions(NSString) |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| GetBindingValueClass(NSString) |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| GetDictionaryOfValuesFromKeys(NSString[]) |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| GetHashCode() |
Genera un codice hash per l'istanza corrente. (Ereditato da NSObject) |
| GetMethodForSelector(Selector) |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| GetNativeHash() |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| Init() |
Inizializza l'oggetto chiamando il metodo Objective-C |
| InitializeHandle(NativeHandle, String) |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| InitializeHandle(NativeHandle) |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| Invoke(Action, Double) |
Richiama l'azione specificata dopo il ritardo specificato. (Ereditato da NSObject) |
| Invoke(Action, TimeSpan) |
Richiama l'azione specificata dopo il ritardo specificato. (Ereditato da NSObject) |
| InvokeOnMainThread(Action) |
Richiama l'azione specificata in modo sincrono nel thread principale dell'interfaccia utente. (Ereditato da NSObject) |
| InvokeOnMainThread(Selector, NSObject) |
Richiama in modo sincrono il codice specificato nel thread principale dell'interfaccia utente. (Ereditato da NSObject) |
| IsEqual(NSObject) |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| IsKindOfClass(Class) |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| IsMemberOfClass(Class) |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| MarkDirty() |
Promuove un normale oggetto peer (IsDirectBinding è true) in un oggetto toggleref. (Ereditato da NSObject) |
| MutableCopy() |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| ObjectDidEndEditing(NSObject) |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| ObserveValue(NSString, NSObject, NSDictionary, IntPtr) |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| PerformSelector(Selector, NSObject, Double, NSString[]) |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| PerformSelector(Selector, NSObject, Double) |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| PerformSelector(Selector, NSObject, NSObject) |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| PerformSelector(Selector, NSObject) |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| PerformSelector(Selector, NSThread, NSObject, Boolean, NSString[]) |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| PerformSelector(Selector, NSThread, NSObject, Boolean) |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| PerformSelector(Selector) |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| PrepareForInterfaceBuilder() |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| RemoveObserver(NSObject, NSString, IntPtr) |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| RemoveObserver(NSObject, NSString) |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| RemoveObserver(NSObject, String, IntPtr) |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| RemoveObserver(NSObject, String) |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| RespondsToSelector(Selector) |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| SetNilValueForKey(NSString) |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| SetValueForKey(NSObject, NSString) |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| SetValueForKeyPath(NativeHandle, NSString) |
Imposta il valore per la proprietà identificata da un determinato percorso di chiave su un determinato valore. (Ereditato da NSObject) |
| SetValueForKeyPath(NSObject, NSString) |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| SetValueForUndefinedKey(NSObject, NSString) |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| SetValuesForKeysWithDictionary(NSDictionary) |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| ToString() |
Restituisce una rappresentazione di stringa del valore dell'istanza corrente. (Ereditato da NSObject) |
| Unbind(NSString) |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| ValueForKey(NSString) |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| ValueForKeyPath(NSString) |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| ValueForUndefinedKey(NSString) |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| WillChange(NSKeyValueChange, NSIndexSet, NSString) |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| WillChange(NSString, NSKeyValueSetMutationKind, NSSet) |
Incapsula un motore JavaScript. (Ereditato da NSObject) |
| WillChangeValue(String) |
Incapsula un motore JavaScript. (Ereditato da NSObject) |