JSContext Klas
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Een JavaScript-engine inkapselen.
[Foundation.Register("JSContext", true)]
public class JSContext : Foundation.NSObject
[<Foundation.Register("JSContext", true)>]
type JSContext = class
inherit NSObject
- Overname
- Kenmerken
Opmerkingen
Het JSContext is het centrale object van de JavaScriptCore naamruimte. Het JSContext onderhoudt een JavaScript-omgeving (gemanipuleerd door de Item[NSObject] eigenschap) en evalueert scripts met de EvaluateScript(String, NSUrl) methode.
Toepassingsontwikkelaars willen vaak een gemachtigde toewijzen aan de eigenschap ExceptionHandler om toegang te krijgen, in hun Xamarin.iOS-code, van uitzonderingen die zijn gegenereerd in het JavaScript-realm.
In het volgende voorbeeld ziet u het basisgebruik van JSContext. De context wordt geïnstantieerd en er wordt een eenvoudige uitzonderingshandler toegewezen. Een van de overbelastingen van de From(NSObject, JSContext) methode wordt gebruikt om waarden toe te wijzen aan de JavaScript-variabelen arg1 en arg2. De methode EvaluateScript(String, NSUrl) evalueert het JavaScript en retourneert het resultaat, dat wordt geconverteerd naar een .NET-object met de methode 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();
De JSContext bevat de globale JavaScript-context, inclusief variabelen die zijn ingesteld door JavaScript-berekeningen, zoals wordt weergegeven in het volgende voorbeeld:
jsContext.EvaluateScript("sum = 2 + 2;");
var four = jsContext[(NSString)"sum"].ToInt32();
C#-code aanroepen vanuit JavaScript
Ontwikkelaars kunnen de IJSExport interface uitbreiden om methoden te definiëren die kunnen worden aangeroepen vanuit JavaScript. Ontwikkelaars moeten die interface markeren met het ProtocolAttribute kenmerk en moeten JavaScript-aanroepbare methoden markeren met het ExportAttribute kenmerk. Ze moeten ook de eigenschap Registrar MSBuild instellen op 'statisch' of 'beheerd statisch' in de projectbestanden. Voorbeeld:
[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;
}
}
Het bovenstaande voorbeeld:
-
Definieert
IMyJSVisibleProtocolals uitbreiding IJSExport;: -
IMyJSVisibleProtocolVersieren en het is een methodeMyFuncmet de ProtocolAttribute en ExportAttribute kenmerken;: - Implementeert de interface:
Om de IMyJSVisibleProtocol code beschikbaar te maken voor JavaScript, kan de ontwikkelaar code als het volgende gebruiken in de methode van UIViewControllerhunViewDidLoad():
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)));
De bovenstaande C#-code:
- Hiermee maakt u een UIWebView die wordt weergegeven aan de eindgebruiker;:
- Hiermee wordt het JSContext hoofdframe van het UIWebView object opgehaald;:
- Adds een uitzonderingshandler zodat JavaScript-problemen zichtbaar zijn voor het Xamarin project; :
-
Instantieert een nieuw
MyJSExporterobject dat, zoals hierboven beschreven, deIMyJSVisibleProtocol;implementeert: -
Voegt dat object toe aan het JSContext object met de naam
myCSharpObject;: - Laadt een HTML-bestand (zie hieronder):
Ten slotte kan het HTML-bestand dat in het UIWebView object is geladen en waarvan JSContext het MyJSExporter object is geplaatst, toegang krijgen tot het object vanuit 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>
Als u een C#-object wilt exporteren zodat het zichtbaar is voor JavaScript, moet de ontwikkelaar het --registrar:static argument toevoegen aan de argumenten die worden gebruikt door mtouch. In Xamarin Studio wordt dit gedaan in het dialoogvenster Project Opties, in het deelvenster Buildopties/iOS-build:

Een andere techniek voor het aanroepen van C#-code vanuit Xamarin.iOS is het gebruik van REST, zoals wordt weergegeven in het volgende:
Gebruik XMLHttpRequest en standaard JSON-technieken in de JavaScript-code om een query te posten en te parseren naar een REST-service die op het lokale apparaat wordt uitgevoerd:
<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>
Gebruik HttpListener in de toepassing om te luisteren naar en te reageren op die aanvraag:
//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();
}
Ten slotte is een derde techniek het peilen van een JSContext vlag die is ingesteld door een JavaScript-berekening.
Constructors
| Name | Description |
|---|---|
| JSContext() |
Een JavaScript-engine inkapselen. |
| JSContext(JSVirtualMachine) |
Een JavaScript-engine inkapselen. |
| JSContext(NativeHandle) |
Een constructor die wordt gebruikt bij het maken van beheerde weergaven van niet-beheerde objecten. Aangeroepen door de runtime. |
| JSContext(NSObjectFlag) |
Constructor die afgeleide klassen aanroept om initialisatie over te slaan en het object alleen toe te wijzen. |
Eigenschappen
| Name | Description |
|---|---|
| AccessibilityAttributedUserInputLabels |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| AccessibilityRespondsToUserInteraction |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| AccessibilityTextualContext |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| AccessibilityUserInputLabels |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| Class |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| ClassHandle |
De Objective-C klassehandgreep voor deze klasse. |
| CurrentArguments |
Een JavaScript-engine inkapselen. |
| CurrentCallee |
Een JavaScript-engine inkapselen. |
| CurrentContext |
Een JavaScript-engine inkapselen. |
| CurrentThis |
Een JavaScript-engine inkapselen. |
| DebugDescription |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| Description |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| Exception |
Een JavaScript-engine inkapselen. |
| ExceptionHandler |
Een JavaScript-engine inkapselen. |
| ExposedBindings |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| GlobalObject |
Een JavaScript-engine inkapselen. |
| Handle |
Handle (pointer) naar de onbeheerde objectweergave. (Overgenomen van NSObject) |
| Inspectable |
Een JavaScript-engine inkapselen. |
| IsDirectBinding |
Hiermee wordt een waarde opgehaald of ingesteld die aangeeft of voor dit exemplaar directe Objective-C binding wordt gebruikt. (Overgenomen van NSObject) |
| IsProxy |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| Item[NSObject] |
Een JavaScript-engine inkapselen. |
| JSGlobalContextRefPtr |
Een JavaScript-engine inkapselen. |
| Name |
Een JavaScript-engine inkapselen. |
| RetainCount |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| Self |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| Superclass |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| SuperHandle |
Handle die wordt gebruikt om de methoden in de basisklasse voor dit NSObjectweer te geven. (Overgenomen van NSObject) |
| VirtualMachine |
Een JavaScript-engine inkapselen. |
| Zone |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
Methoden
| Name | Description |
|---|---|
| AddObserver(NSObject, NSString, NSKeyValueObservingOptions, IntPtr) |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| AddObserver(NSObject, String, NSKeyValueObservingOptions, IntPtr) |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| AddObserver(NSString, NSKeyValueObservingOptions, Action<NSObservedChange>) |
Registreert een object dat extern kan worden waargenomen met behulp van een willekeurige methode. (Overgenomen van NSObject) |
| AddObserver(String, NSKeyValueObservingOptions, Action<NSObservedChange>) |
Registreert een object dat extern kan worden waargenomen met behulp van een willekeurige methode. (Overgenomen van NSObject) |
| AwakeFromNib() |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| BeginInvokeOnMainThread(Action) |
Roept de opgegeven actie asynchroon aan op de hoofd-UI-thread. (Overgenomen van NSObject) |
| BeginInvokeOnMainThread(Selector, NSObject) |
Roept asynchroon de opgegeven code aan op de hoofd-UI-thread. (Overgenomen van NSObject) |
| Bind(NSString, NSObject, String, NSBindingOptions) |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| Bind(NSString, NSObject, String, NSDictionary) |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| CommitEditing() |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| CommitEditing(NSObject, Selector, IntPtr) |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| ConformsToProtocol(NativeHandle) |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| Copy() |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| DangerousAutorelease() |
Roept de selector 'autorelease' aan op dit object. (Overgenomen van NSObject) |
| DangerousRelease() |
Roept de 'release'-selector op dit object aan. (Overgenomen van NSObject) |
| DangerousRetain() |
Roept de selector 'behouden' aan voor dit object. (Overgenomen van NSObject) |
| DidChange(NSKeyValueChange, NSIndexSet, NSString) |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| DidChange(NSString, NSKeyValueSetMutationKind, NSSet) |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| DidChangeValue(String) |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| Dispose() |
Releases van de resources die door het NSObject object worden gebruikt. (Overgenomen van NSObject) |
| Dispose(Boolean) |
Releases van de resources die door dit object worden gebruikt. (Overgenomen van NSObject) |
| DoesNotRecognizeSelector(Selector) |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| Equals(NSObject) |
Bepaalt of de opgegeven NSObject waarde gelijk is aan de huidige NSObject. (Overgenomen van NSObject) |
| Equals(Object) |
Bepaalt of het opgegeven object gelijk is aan de huidige NSObject. (Overgenomen van NSObject) |
| EvaluateScript(String, NSUrl) |
Een JavaScript-engine inkapselen. |
| EvaluateScript(String) |
Een JavaScript-engine inkapselen. |
| FromJSGlobalContextRef(IntPtr) |
Een JavaScript-engine inkapselen. |
| GetBindingInfo(NSString) |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| GetBindingOptionDescriptions(NSString) |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| GetBindingValueClass(NSString) |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| GetDictionaryOfValuesFromKeys(NSString[]) |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| GetHashCode() |
Genereert een hash-code voor het huidige exemplaar. (Overgenomen van NSObject) |
| GetMethodForSelector(Selector) |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| GetNativeHash() |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| Init() |
Initialiseert het object door de methode Objective-C |
| InitializeHandle(NativeHandle, String) |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| InitializeHandle(NativeHandle) |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| Invoke(Action, Double) |
Roept de opgegeven actie aan na de opgegeven vertraging. (Overgenomen van NSObject) |
| Invoke(Action, TimeSpan) |
Roept de opgegeven actie aan na de opgegeven vertraging. (Overgenomen van NSObject) |
| InvokeOnMainThread(Action) |
Roept de opgegeven actie synchroon aan op de hoofd-UI-thread. (Overgenomen van NSObject) |
| InvokeOnMainThread(Selector, NSObject) |
Roept synchroon de opgegeven code aan op de hoofd-UI-thread. (Overgenomen van NSObject) |
| IsEqual(NSObject) |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| IsKindOfClass(Class) |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| IsMemberOfClass(Class) |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| MarkDirty() |
Bevordert een normaal peerobject (IsDirectBinding is waar) in een wisselknopobject. (Overgenomen van NSObject) |
| MutableCopy() |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| ObjectDidEndEditing(NSObject) |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| ObserveValue(NSString, NSObject, NSDictionary, IntPtr) |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| PerformSelector(Selector, NSObject, Double, NSString[]) |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| PerformSelector(Selector, NSObject, Double) |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| PerformSelector(Selector, NSObject, NSObject) |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| PerformSelector(Selector, NSObject) |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| PerformSelector(Selector, NSThread, NSObject, Boolean, NSString[]) |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| PerformSelector(Selector, NSThread, NSObject, Boolean) |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| PerformSelector(Selector) |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| PrepareForInterfaceBuilder() |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| RemoveObserver(NSObject, NSString, IntPtr) |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| RemoveObserver(NSObject, NSString) |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| RemoveObserver(NSObject, String, IntPtr) |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| RemoveObserver(NSObject, String) |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| RespondsToSelector(Selector) |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| SetNilValueForKey(NSString) |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| SetValueForKey(NSObject, NSString) |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| SetValueForKeyPath(NativeHandle, NSString) |
Hiermee stelt u de waarde in voor de eigenschap die wordt geïdentificeerd door een bepaald sleutelpad naar een bepaalde waarde. (Overgenomen van NSObject) |
| SetValueForKeyPath(NSObject, NSString) |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| SetValueForUndefinedKey(NSObject, NSString) |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| SetValuesForKeysWithDictionary(NSDictionary) |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| ToString() |
Retourneert een tekenreeksweergave van de waarde van het huidige exemplaar. (Overgenomen van NSObject) |
| Unbind(NSString) |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| ValueForKey(NSString) |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| ValueForKeyPath(NSString) |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| ValueForUndefinedKey(NSString) |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| WillChange(NSKeyValueChange, NSIndexSet, NSString) |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| WillChange(NSString, NSKeyValueSetMutationKind, NSSet) |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |
| WillChangeValue(String) |
Een JavaScript-engine inkapselen. (Overgenomen van NSObject) |