JSContext Sınıf
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
JavaScript altyapısını kapsüller.
[Foundation.Register("JSContext", true)]
public class JSContext : Foundation.NSObject
[<Foundation.Register("JSContext", true)>]
type JSContext = class
inherit NSObject
- Devralma
- Öznitelikler
Açıklamalar
JSContext, ad alanının merkezi nesnesidirJavaScriptCore. bir JSContext JavaScript ortamı tutar (özelliği tarafından Item[NSObject] yönetilir) ve betikleri yöntemiyle EvaluateScript(String, NSUrl) değerlendirir.
Uygulama geliştiricileri genellikle Xamarin.iOS kodunda JavaScript alanında oluşan özel durumlara erişim elde etmek için ExceptionHandler özelliğine bir temsilci atamak ister.
Aşağıdaki örnekte temel kullanımı gösterilmektedir JSContext. Bağlam örneği oluşturulur ve basit bir özel durum işleyicisi atanır. Yöntem aşırı yüklemelerinden From(NSObject, JSContext) biri, ve arg2JavaScript değişkenlerine arg1 değer atamak için kullanılır.
EvaluateScript(String, NSUrl) yöntemi JavaScript'i değerlendirir ve sonucu döndürür; bu, ToInt32() yöntemiyle bir .NET nesnesine geri dönüştürülür.
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 aşağıdaki örnekte gösterildiği gibi JavaScript hesaplamaları tarafından ayarlanan değişkenler de dahil olmak üzere genel JavaScript bağlamını içerir:
jsContext.EvaluateScript("sum = 2 + 2;");
var four = jsContext[(NSString)"sum"].ToInt32();
JavaScript'ten C# kodu çağırma
Geliştiriciler, JavaScript'ten çağrılabilecek yöntemleri tanımlamak için arabirimi genişletebilir IJSExport . Geliştiricilerin bu arabirimi özniteliğiyle ProtocolAttribute işaretlemesi ve JavaScript çağrılabilen yöntemleri özniteliğiyle ExportAttribute işaretlemesi gerekir. Ayrıca proje dosyalarında MSBuild özelliğini Registrar "static" veya "managed-static" olarak ayarlamaları gerekir. Örneğin:
[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;
}
}
Yukarıdaki örnek:
-
Genişletici IJSExportolarak tanımlar
IMyJSVisibleProtocol;: -
ve öznitelikleriyle süsler
IMyJSVisibleProtocolve yöntemidirMyFuncProtocolAttributeExportAttribute ;: - Arabirimi uygular:
Geliştirici, JavaScript'ini kullanıma açmak IMyJSVisibleProtocol için yönteminde ViewDidLoad()UIViewControlleraşağıdaki gibi bir kod kullanabilir:
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)));
Yukarıdaki C# kodu:
- Son kullanıcıya görüntülenecek bir UIWebView oluşturur;:
- JSContext Nesnenin ana çerçevesini UIWebView alır;:
- JavaScript sorunu Xamarin projesi tarafından görülebilmesi için bir özel durum işleyicisi ekleyin; :
-
Yukarıda açıklandığı gibi ; uygulayan yeni
MyJSExporterbir nesne örneğiIMyJSVisibleProtocololuşturur: -
Bu nesneyi JSContext ;: adlı
myCSharpObjectnesnesine ekler: - HTML dosyasını yükler (aşağıya bakın):
Son olarak, nesnesi yerleştirildiği ve JSContextMyJSExporter içine yüklenen UIWebView HTML dosyası, nesneye JavaScript içinden erişebilir:
<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>
JavaScript'e görünür olması için bir C# nesnesini dışarı aktarmak için geliştiricinin --registrar:static tarafından mtouchkullanılan bağımsız değişkenlere bağımsız değişkenini eklemesi gerekir. Xamarin Studio'da bu işlem, Project Seçenekleri iletişim kutusundaki Derleme Seçenekleri / iOS Derleme bölmesinde yapılır:

Xamarin.iOS'tan C# kodunu çağırmanın bir diğer tekniği de, aşağıda gösterildiği gibi REST kullanmaktır:
JavaScript kodunda, sorguyu yerel cihazda çalışan bir REST hizmetine göndermek ve ayrıştırmak için ve standart JSON tekniklerini kullanın XMLHttpRequest :
<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>
Uygulamada, bu isteği dinlemek ve yanıtlamak için kullanın HttpListener :
//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();
}
Son olarak, üçüncü bir teknik javascript hesaplaması JSContext tarafından ayarlanan bayrak için yoklama yapmaktır.
Oluşturucular
| Name | Description |
|---|---|
| JSContext() |
JavaScript altyapısını kapsüller. |
| JSContext(JSVirtualMachine) |
JavaScript altyapısını kapsüller. |
| JSContext(NativeHandle) |
Yönetilmeyen nesnelerin yönetilen gösterimlerini oluştururken kullanılan bir oluşturucu. Çalışma zamanı tarafından çağrılır. |
| JSContext(NSObjectFlag) |
Oluşturucu, türetilmiş sınıfları çağırarak başlatmayı atlar ve yalnızca nesneyi ayırır. |
Özellikler
| Name | Description |
|---|---|
| AccessibilityAttributedUserInputLabels |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| AccessibilityRespondsToUserInteraction |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| AccessibilityTextualContext |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| AccessibilityUserInputLabels |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| Class |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| ClassHandle |
Bu sınıf için Objective-C sınıf tanıtıcısı. |
| CurrentArguments |
JavaScript altyapısını kapsüller. |
| CurrentCallee |
JavaScript altyapısını kapsüller. |
| CurrentContext |
JavaScript altyapısını kapsüller. |
| CurrentThis |
JavaScript altyapısını kapsüller. |
| DebugDescription |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| Description |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| Exception |
JavaScript altyapısını kapsüller. |
| ExceptionHandler |
JavaScript altyapısını kapsüller. |
| ExposedBindings |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| GlobalObject |
JavaScript altyapısını kapsüller. |
| Handle |
Yönetilmeyen nesne gösterimi için tanıtıcı (işaretçi). (Devralındığı yer: NSObject) |
| Inspectable |
JavaScript altyapısını kapsüller. |
| IsDirectBinding |
Bu örneğin doğrudan Objective-C bağlama kullanıp kullanmadığını belirten bir değer alır veya ayarlar. (Devralındığı yer: NSObject) |
| IsProxy |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| Item[NSObject] |
JavaScript altyapısını kapsüller. |
| JSGlobalContextRefPtr |
JavaScript altyapısını kapsüller. |
| Name |
JavaScript altyapısını kapsüller. |
| RetainCount |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| Self |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| Superclass |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| SuperHandle |
Bu NSObjectiçin temel sınıftaki yöntemleri temsil etmek için kullanılan tanıtıcı. (Devralındığı yer: NSObject) |
| VirtualMachine |
JavaScript altyapısını kapsüller. |
| Zone |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
Yöntemler
| Name | Description |
|---|---|
| AddObserver(NSObject, NSString, NSKeyValueObservingOptions, IntPtr) |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| AddObserver(NSObject, String, NSKeyValueObservingOptions, IntPtr) |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| AddObserver(NSString, NSKeyValueObservingOptions, Action<NSObservedChange>) |
Rastgele bir yöntem kullanarak bir nesneyi harici olarak gözlemlenmek üzere kaydeder. (Devralındığı yer: NSObject) |
| AddObserver(String, NSKeyValueObservingOptions, Action<NSObservedChange>) |
Rastgele bir yöntem kullanarak bir nesneyi harici olarak gözlemlenmek üzere kaydeder. (Devralındığı yer: NSObject) |
| AwakeFromNib() |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| BeginInvokeOnMainThread(Action) |
Belirtilen eylemi ana ui iş parçacığında zaman uyumsuz olarak çağırır. (Devralındığı yer: NSObject) |
| BeginInvokeOnMainThread(Selector, NSObject) |
Ana ui iş parçacığında belirtilen kodu zaman uyumsuz olarak çağırır. (Devralındığı yer: NSObject) |
| Bind(NSString, NSObject, String, NSBindingOptions) |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| Bind(NSString, NSObject, String, NSDictionary) |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| CommitEditing() |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| CommitEditing(NSObject, Selector, IntPtr) |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| ConformsToProtocol(NativeHandle) |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| Copy() |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| DangerousAutorelease() |
Bu nesnede 'autorelease' seçicisini çağırır. (Devralındığı yer: NSObject) |
| DangerousRelease() |
Bu nesnedeki 'release' seçicisini çağırır. (Devralındığı yer: NSObject) |
| DangerousRetain() |
Bu nesnede 'retain' seçicisini çağırır. (Devralındığı yer: NSObject) |
| DidChange(NSKeyValueChange, NSIndexSet, NSString) |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| DidChange(NSString, NSKeyValueSetMutationKind, NSSet) |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| DidChangeValue(String) |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| Dispose() |
nesnesi tarafından NSObject kullanılan kaynakları serbest bırakır. (Devralındığı yer: NSObject) |
| Dispose(Boolean) |
Bu nesne tarafından kullanılan kaynakları serbest bırakır. (Devralındığı yer: NSObject) |
| DoesNotRecognizeSelector(Selector) |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| Equals(NSObject) |
Belirtilen NSObject öğesinin geçerli NSObjectöğesine eşit olup olmadığını belirler. (Devralındığı yer: NSObject) |
| Equals(Object) |
Belirtilen nesnenin geçerli NSObjectöğesine eşit olup olmadığını belirler. (Devralındığı yer: NSObject) |
| EvaluateScript(String, NSUrl) |
JavaScript altyapısını kapsüller. |
| EvaluateScript(String) |
JavaScript altyapısını kapsüller. |
| FromJSGlobalContextRef(IntPtr) |
JavaScript altyapısını kapsüller. |
| GetBindingInfo(NSString) |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| GetBindingOptionDescriptions(NSString) |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| GetBindingValueClass(NSString) |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| GetDictionaryOfValuesFromKeys(NSString[]) |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| GetHashCode() |
Geçerli örnek için bir karma kodu oluşturur. (Devralındığı yer: NSObject) |
| GetMethodForSelector(Selector) |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| GetNativeHash() |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| Init() |
Objective-C |
| InitializeHandle(NativeHandle, String) |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| InitializeHandle(NativeHandle) |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| Invoke(Action, Double) |
Belirtilen gecikmeden sonra belirtilen eylemi çağırır. (Devralındığı yer: NSObject) |
| Invoke(Action, TimeSpan) |
Belirtilen gecikmeden sonra belirtilen eylemi çağırır. (Devralındığı yer: NSObject) |
| InvokeOnMainThread(Action) |
Belirtilen eylemi ana ui iş parçacığında zaman uyumlu olarak çağırır. (Devralındığı yer: NSObject) |
| InvokeOnMainThread(Selector, NSObject) |
Ana ui iş parçacığında belirtilen kodu zaman uyumlu olarak çağırır. (Devralındığı yer: NSObject) |
| IsEqual(NSObject) |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| IsKindOfClass(Class) |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| IsMemberOfClass(Class) |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| MarkDirty() |
Normal bir eş nesneyi (IsDirectBinding true) bir toggleref nesnesine yükselter. (Devralındığı yer: NSObject) |
| MutableCopy() |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| ObjectDidEndEditing(NSObject) |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| ObserveValue(NSString, NSObject, NSDictionary, IntPtr) |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| PerformSelector(Selector, NSObject, Double, NSString[]) |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| PerformSelector(Selector, NSObject, Double) |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| PerformSelector(Selector, NSObject, NSObject) |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| PerformSelector(Selector, NSObject) |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| PerformSelector(Selector, NSThread, NSObject, Boolean, NSString[]) |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| PerformSelector(Selector, NSThread, NSObject, Boolean) |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| PerformSelector(Selector) |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| PrepareForInterfaceBuilder() |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| RemoveObserver(NSObject, NSString, IntPtr) |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| RemoveObserver(NSObject, NSString) |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| RemoveObserver(NSObject, String, IntPtr) |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| RemoveObserver(NSObject, String) |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| RespondsToSelector(Selector) |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| SetNilValueForKey(NSString) |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| SetValueForKey(NSObject, NSString) |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| SetValueForKeyPath(NativeHandle, NSString) |
Belirli bir anahtar yolu tarafından tanımlanan özelliğin değerini belirli bir değere ayarlar. (Devralındığı yer: NSObject) |
| SetValueForKeyPath(NSObject, NSString) |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| SetValueForUndefinedKey(NSObject, NSString) |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| SetValuesForKeysWithDictionary(NSDictionary) |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| ToString() |
Geçerli örneğin değerinin dize gösterimini döndürür. (Devralındığı yer: NSObject) |
| Unbind(NSString) |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| ValueForKey(NSString) |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| ValueForKeyPath(NSString) |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| ValueForUndefinedKey(NSString) |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| WillChange(NSKeyValueChange, NSIndexSet, NSString) |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| WillChange(NSString, NSKeyValueSetMutationKind, NSSet) |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |
| WillChangeValue(String) |
JavaScript altyapısını kapsüller. (Devralındığı yer: NSObject) |