JSContext Classe

Definizione

Incapsula un motore JavaScript.

[Foundation.Register("JSContext", true)]
public class JSContext : Foundation.NSObject
[<Foundation.Register("JSContext", true)>]
type JSContext = class
    inherit NSObject
Ereditarietà
JSContext
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 valuta JavaScript e restituisce il risultato, che viene convertito nuovamente in un oggetto .NET con 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:

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 MyJSExporter oggetto 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 init .

(Ereditato da NSObject)
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)

Metodi di estensione

Nome Descrizione
AcceptsPreviewPanelControl(NSObject, QLPreviewPanel)

Incapsula un motore JavaScript.

AccessibilityHitTest(NSObject, CGPoint, UIEvent)

Incapsula un motore JavaScript.

BeginPreviewPanelControl(NSObject, QLPreviewPanel)

Incapsula un motore JavaScript.

BrowserAccessibilityDeleteTextAtCursor(NSObject, IntPtr)

Incapsula un motore JavaScript.

BrowserAccessibilityInsertTextAtCursor(NSObject, String)

Incapsula un motore JavaScript.

EndPreviewPanelControl(NSObject, QLPreviewPanel)

Incapsula un motore JavaScript.

GetAccessibilityCustomRotors(NSObject)

Ottiene la matrice di UIAccessibilityCustomRotor oggetti appropriata per this l'oggetto .

GetAccessibilityLineEndPositionFromCurrentSelection(NSObject)

Incapsula un motore JavaScript.

GetAccessibilityLineRangeForPosition(NSObject, IntPtr)

Incapsula un motore JavaScript.

GetAccessibilityLineStartPositionFromCurrentSelection(NSObject)

Incapsula un motore JavaScript.

GetAccessibilityNextTextNavigationElement(NSObject)

Incapsula un motore JavaScript.

GetAccessibilityNextTextNavigationElementBlock(NSObject)

Incapsula un motore JavaScript.

GetAccessibilityPreviousTextNavigationElement(NSObject)

Incapsula un motore JavaScript.

GetAccessibilityPreviousTextNavigationElementBlock(NSObject)

Incapsula un motore JavaScript.

GetAccessibilityTextInputResponder(NSObject)

Incapsula un motore JavaScript.

GetAccessibilityTextInputResponderHandler(NSObject)

Incapsula un motore JavaScript.

GetBrowserAccessibilityAttributedValue(NSObject, NSRange)

Incapsula un motore JavaScript.

GetBrowserAccessibilityContainerType(NSObject)

Incapsula un motore JavaScript.

GetBrowserAccessibilityCurrentStatus(NSObject)

Incapsula un motore JavaScript.

GetBrowserAccessibilityHasDomFocus(NSObject)

Incapsula un motore JavaScript.

GetBrowserAccessibilityIsRequired(NSObject)

Incapsula un motore JavaScript.

GetBrowserAccessibilityPressedState(NSObject)

Incapsula un motore JavaScript.

GetBrowserAccessibilityRoleDescription(NSObject)

Incapsula un motore JavaScript.

GetBrowserAccessibilitySelectedTextRange(NSObject)

Incapsula un motore JavaScript.

GetBrowserAccessibilitySortDirection(NSObject)

Incapsula un motore JavaScript.

GetBrowserAccessibilityValue(NSObject, NSRange)

Incapsula un motore JavaScript.

GetDebugDescription(INSObjectProtocol)

Incapsula un motore JavaScript.

GetHandle(INativeObject)

Incapsula un motore JavaScript.

GetNonNullHandle(INativeObject, String)

Incapsula un motore JavaScript.

GetValidModes(NSObject, NSFontPanel)

Incapsula un motore JavaScript.

ObjectDidBeginEditing(NSObject, INSEditor)

Incapsula un motore JavaScript.

ObjectDidEndEditing(NSObject, INSEditor)

Incapsula un motore JavaScript.

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

Incapsula un motore JavaScript.

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

Incapsula un motore JavaScript.

SetAccessibilityCustomRotors(NSObject, UIAccessibilityCustomRotor[])

Imposta la matrice di UIAccessibilityCustomRotor oggetti appropriata per this l'oggetto .

SetAccessibilityNextTextNavigationElement(NSObject, NSObject)

Incapsula un motore JavaScript.

SetAccessibilityNextTextNavigationElementBlock(NSObject, AXObjectReturnBlock)

Incapsula un motore JavaScript.

SetAccessibilityPreviousTextNavigationElement(NSObject, NSObject)

Incapsula un motore JavaScript.

SetAccessibilityPreviousTextNavigationElementBlock(NSObject, AXObjectReturnBlock)

Incapsula un motore JavaScript.

SetAccessibilityTextInputResponder(NSObject, IUITextInput)

Incapsula un motore JavaScript.

SetAccessibilityTextInputResponderHandler(NSObject, UITextInputReturnHandler)

Incapsula un motore JavaScript.

SetBrowserAccessibilityContainerType(NSObject, BEAccessibilityContainerType)

Incapsula un motore JavaScript.

SetBrowserAccessibilityCurrentStatus(NSObject, String)

Incapsula un motore JavaScript.

SetBrowserAccessibilityHasDomFocus(NSObject, Boolean)

Incapsula un motore JavaScript.

SetBrowserAccessibilityIsRequired(NSObject, Boolean)

Incapsula un motore JavaScript.

SetBrowserAccessibilityPressedState(NSObject, BEAccessibilityPressedState)

Incapsula un motore JavaScript.

SetBrowserAccessibilityRoleDescription(NSObject, String)

Incapsula un motore JavaScript.

SetBrowserAccessibilitySelectedTextRange(NSObject, NSRange)

Incapsula un motore JavaScript.

SetBrowserAccessibilitySortDirection(NSObject, String)

Incapsula un motore JavaScript.

SetSharedObservers(NSObject, NSKeyValueSharedObserversSnapshot)

Incapsula un motore JavaScript.

ValidateToolbarItem(NSObject, NSToolbarItem)

Incapsula un motore JavaScript.

Si applica a

Vedi anche