語言

JSContext 類別

定義

封裝了一個 JavaScript 引擎。

[Foundation.Register("JSContext", true)]
public class JSContext : Foundation.NSObject
[<Foundation.Register("JSContext", true)>]
type JSContext = class
    inherit NSObject
繼承
JSContext
屬性

備註

the JSContext 是命名空間的 JavaScriptCore 中心物件。 它 JSContext 維護一個 JavaScript 環境(由屬性 Item[NSObject] 操作),並用該 EvaluateScript(String, NSUrl) 方法評估腳本。

應用程式開發者通常會希望在 ExceptionHandler 屬性上指派一個代理,以便在 Xamarin.iOS 程式碼中存取 JavaScript 領域中提出的例外。

以下範例展示了 的基本 JSContext用法。 情境會被實例化,並指派一個簡單的例外處理程序。 其中一個 From(NSObject, JSContext) 方法的超載用於為 JavaScript 變數 arg1arg2和 分配值。 EvaluateScript(String, NSUrl) 方法會評估 JavaScript 並回傳結果,然後再用 ToInt32() 方法將結果轉換回 .NET 物件。

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 全域 JavaScript 上下文,包括由 JavaScript 計算設定的變數,如下範例所示:

jsContext.EvaluateScript("sum = 2 + 2;");
var four = jsContext[(NSString)"sum"].ToInt32();

呼叫 JavaScript 中的 C# 程式碼

開發者可以擴充介面 IJSExport ,定義可從 JavaScript 呼叫的方法。 開發者必須以 ProtocolAttribute 屬性標記該介面,並以屬性標記可呼叫 JavaScript 的方法 ExportAttribute 。 他們也必須在專案檔案中將 MSBuild 屬性 Registrar 設定為「靜態」或「管理靜態」。 例如:

[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;
}
}

上述例子:

為了讓 JavaScript 暴露, IMyJSVisibleProtocol 開發者可以用如下程式碼在 ViewDidLoad() 他們的 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)));

上述 C# 程式碼:

  • 建立一個UIWebView將顯示給最終使用者的 ;
  • 取得JSContextUIWebView物件主框架的 ;:
  • 新增例外處理程式,使 JavaScript 問題對 Xamarin 專案可見;:
  • 實例化一個新 MyJSExporter 物件,如前所述,實 IMyJSVisibleProtocol作 ;:
  • 將該物件加到 JSContext ,名稱為 myCSharpObject;:
  • 載入一個 HTML 檔案(見下文):

最後,載入 UIWebViewJSContextMyJSExporter 和 的 HTML 檔案可從 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>

為了匯出一個 C# 物件使其對 JavaScript 可視,開發者必須將參數加入 --registrar:static 所 mtouch使用的參數中。 在 Xamarin Studio 中,這是在 Project 選項對話框的建置選項 / iOS 建置面板中完成的:

另一種從 Xamarin.iOS 呼叫 C# 程式碼的技巧是使用 REST,如下所示:

在 JavaScript 程式碼中,使用 XMLHttpRequest 標準 JSON 技術來發布並解析查詢給本地裝置上運行的 REST 服務:

<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>

在應用程式中,請使用 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();
}

最後,第三種技術是輪詢 , JSContext 以取得 JavaScript 計算所設定的旗標。

建構函式

名稱 Description
JSContext()

封裝了一個 JavaScript 引擎。

JSContext(JSVirtualMachine)

封裝了一個 JavaScript 引擎。

JSContext(NativeHandle)

一種用於建立未受管理物件的受管理表示的建構器。 由執行時呼叫。

JSContext(NSObjectFlag)

用來呼叫衍生類別跳過初始化,僅僅配置物件。

屬性

名稱 Description
AccessibilityAttributedUserInputLabels

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
AccessibilityRespondsToUserInteraction

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
AccessibilityTextualContext

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
AccessibilityUserInputLabels

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
Class

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
ClassHandle

Objective-C 類別是這個類別的處理方式。

CurrentArguments

封裝了一個 JavaScript 引擎。

CurrentCallee

封裝了一個 JavaScript 引擎。

CurrentContext

封裝了一個 JavaScript 引擎。

CurrentThis

封裝了一個 JavaScript 引擎。

DebugDescription

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
Description

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
Exception

封裝了一個 JavaScript 引擎。

ExceptionHandler

封裝了一個 JavaScript 引擎。

ExposedBindings

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
GlobalObject

封裝了一個 JavaScript 引擎。

Handle

Handle(指標)指向未管理物件表示。

(繼承來源 NSObject)
Inspectable

封裝了一個 JavaScript 引擎。

IsDirectBinding

取得或設定一個值,指示此實例是否使用直接 Objective-C 綁定。

(繼承來源 NSObject)
IsProxy

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
Item[NSObject]

封裝了一個 JavaScript 引擎。

JSGlobalContextRefPtr

封裝了一個 JavaScript 引擎。

Name

封裝了一個 JavaScript 引擎。

RetainCount

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
Self

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
Superclass

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
SuperHandle

用 handle 表示此 NSObject基底類別中的方法。

(繼承來源 NSObject)
VirtualMachine

封裝了一個 JavaScript 引擎。

Zone

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)

方法

名稱 Description
AddObserver(NSObject, NSString, NSKeyValueObservingOptions, IntPtr)

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
AddObserver(NSObject, String, NSKeyValueObservingOptions, IntPtr)

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
AddObserver(NSString, NSKeyValueObservingOptions, Action<NSObservedChange>)

以任意方法註冊物件以便外部觀察。

(繼承來源 NSObject)
AddObserver(String, NSKeyValueObservingOptions, Action<NSObservedChange>)

以任意方法註冊物件以便外部觀察。

(繼承來源 NSObject)
AwakeFromNib()

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
BeginInvokeOnMainThread(Action)

在主介面執行緒上非同步呼叫指定的動作。

(繼承來源 NSObject)
BeginInvokeOnMainThread(Selector, NSObject)

非同步地在主介面執行緒中呼叫指定的程式碼。

(繼承來源 NSObject)
Bind(NSString, NSObject, String, NSBindingOptions)

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
Bind(NSString, NSObject, String, NSDictionary)

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
CommitEditing()

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
CommitEditing(NSObject, Selector, IntPtr)

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
ConformsToProtocol(NativeHandle)

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
Copy()

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
DangerousAutorelease()

呼叫此物件的「自動釋放」選擇器。

(繼承來源 NSObject)
DangerousRelease()

呼叫此物件的「釋放」選擇器。

(繼承來源 NSObject)
DangerousRetain()

呼叫此物件的「保留」選擇器。

(繼承來源 NSObject)
DidChange(NSKeyValueChange, NSIndexSet, NSString)

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
DidChange(NSString, NSKeyValueSetMutationKind, NSSet)

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
DidChangeValue(String)

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
Dispose()

釋放物件 NSObject 所使用的資源。

(繼承來源 NSObject)
Dispose(Boolean)

釋放此物件所使用的資源。

(繼承來源 NSObject)
DoesNotRecognizeSelector(Selector)

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
Equals(NSObject)

判斷指定的 NSObject 是否等於電流 NSObject。

(繼承來源 NSObject)
Equals(Object)

判斷指定的物件是否等於當前 NSObject的 。

(繼承來源 NSObject)
EvaluateScript(String, NSUrl)

封裝了一個 JavaScript 引擎。

EvaluateScript(String)

封裝了一個 JavaScript 引擎。

FromJSGlobalContextRef(IntPtr)

封裝了一個 JavaScript 引擎。

GetBindingInfo(NSString)

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
GetBindingOptionDescriptions(NSString)

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
GetBindingValueClass(NSString)

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
GetDictionaryOfValuesFromKeys(NSString[])

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
GetHashCode()

為目前實例產生雜湊碼。

(繼承來源 NSObject)
GetMethodForSelector(Selector)

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
GetNativeHash()

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
Init()

透過呼叫 Objective-C init 方法初始化物件。

(繼承來源 NSObject)
InitializeHandle(NativeHandle, String)

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
InitializeHandle(NativeHandle)

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
Invoke(Action, Double)

在指定的延遲後執行指定動作。

(繼承來源 NSObject)
Invoke(Action, TimeSpan)

在指定的延遲後執行指定動作。

(繼承來源 NSObject)
InvokeOnMainThread(Action)

同步呼叫指定動作於主介面執行緒。

(繼承來源 NSObject)
InvokeOnMainThread(Selector, NSObject)

同步呼叫主介面執行緒中指定的程式碼。

(繼承來源 NSObject)
IsEqual(NSObject)

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
IsKindOfClass(Class)

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
IsMemberOfClass(Class)

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
MarkDirty()

將一般的對等物件(IsDirectBinding 為真)升格為 toggleref 物件。

(繼承來源 NSObject)
MutableCopy()

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
ObjectDidEndEditing(NSObject)

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
ObserveValue(NSString, NSObject, NSDictionary, IntPtr)

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
PerformSelector(Selector, NSObject, Double, NSString[])

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
PerformSelector(Selector, NSObject, Double)

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
PerformSelector(Selector, NSObject, NSObject)

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
PerformSelector(Selector, NSObject)

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
PerformSelector(Selector, NSThread, NSObject, Boolean, NSString[])

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
PerformSelector(Selector, NSThread, NSObject, Boolean)

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
PerformSelector(Selector)

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
PrepareForInterfaceBuilder()

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
RemoveObserver(NSObject, NSString, IntPtr)

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
RemoveObserver(NSObject, NSString)

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
RemoveObserver(NSObject, String, IntPtr)

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
RemoveObserver(NSObject, String)

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
RespondsToSelector(Selector)

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
SetNilValueForKey(NSString)

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
SetValueForKey(NSObject, NSString)

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
SetValueForKeyPath(NativeHandle, NSString)

將由給定金鑰路徑所識別的屬性值設定給定值。

(繼承來源 NSObject)
SetValueForKeyPath(NSObject, NSString)

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
SetValueForUndefinedKey(NSObject, NSString)

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
SetValuesForKeysWithDictionary(NSDictionary)

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
ToString()

回傳當前實例值的字串表示。

(繼承來源 NSObject)
Unbind(NSString)

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
ValueForKey(NSString)

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
ValueForKeyPath(NSString)

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
ValueForUndefinedKey(NSString)

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
WillChange(NSKeyValueChange, NSIndexSet, NSString)

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
WillChange(NSString, NSKeyValueSetMutationKind, NSSet)

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)
WillChangeValue(String)

封裝了一個 JavaScript 引擎。

(繼承來源 NSObject)

擴充方法

名稱 Description
AcceptsPreviewPanelControl(NSObject, QLPreviewPanel)

封裝了一個 JavaScript 引擎。

AccessibilityHitTest(NSObject, CGPoint, UIEvent)

封裝了一個 JavaScript 引擎。

BeginPreviewPanelControl(NSObject, QLPreviewPanel)

封裝了一個 JavaScript 引擎。

BrowserAccessibilityDeleteTextAtCursor(NSObject, IntPtr)

封裝了一個 JavaScript 引擎。

BrowserAccessibilityInsertTextAtCursor(NSObject, String)

封裝了一個 JavaScript 引擎。

EndPreviewPanelControl(NSObject, QLPreviewPanel)

封裝了一個 JavaScript 引擎。

GetAccessibilityCustomRotors(NSObject)

取得適合物件this的UIAccessibilityCustomRotor物件陣列。

GetAccessibilityLineEndPositionFromCurrentSelection(NSObject)

封裝了一個 JavaScript 引擎。

GetAccessibilityLineRangeForPosition(NSObject, IntPtr)

封裝了一個 JavaScript 引擎。

GetAccessibilityLineStartPositionFromCurrentSelection(NSObject)

封裝了一個 JavaScript 引擎。

GetAccessibilityNextTextNavigationElement(NSObject)

封裝了一個 JavaScript 引擎。

GetAccessibilityNextTextNavigationElementBlock(NSObject)

封裝了一個 JavaScript 引擎。

GetAccessibilityPreviousTextNavigationElement(NSObject)

封裝了一個 JavaScript 引擎。

GetAccessibilityPreviousTextNavigationElementBlock(NSObject)

封裝了一個 JavaScript 引擎。

GetAccessibilityTextInputResponder(NSObject)

封裝了一個 JavaScript 引擎。

GetAccessibilityTextInputResponderHandler(NSObject)

封裝了一個 JavaScript 引擎。

GetBrowserAccessibilityAttributedValue(NSObject, NSRange)

封裝了一個 JavaScript 引擎。

GetBrowserAccessibilityContainerType(NSObject)

封裝了一個 JavaScript 引擎。

GetBrowserAccessibilityCurrentStatus(NSObject)

封裝了一個 JavaScript 引擎。

GetBrowserAccessibilityHasDomFocus(NSObject)

封裝了一個 JavaScript 引擎。

GetBrowserAccessibilityIsRequired(NSObject)

封裝了一個 JavaScript 引擎。

GetBrowserAccessibilityPressedState(NSObject)

封裝了一個 JavaScript 引擎。

GetBrowserAccessibilityRoleDescription(NSObject)

封裝了一個 JavaScript 引擎。

GetBrowserAccessibilitySelectedTextRange(NSObject)

封裝了一個 JavaScript 引擎。

GetBrowserAccessibilitySortDirection(NSObject)

封裝了一個 JavaScript 引擎。

GetBrowserAccessibilityValue(NSObject, NSRange)

封裝了一個 JavaScript 引擎。

GetDebugDescription(INSObjectProtocol)

封裝了一個 JavaScript 引擎。

GetHandle(INativeObject)

封裝了一個 JavaScript 引擎。

GetNonNullHandle(INativeObject, String)

封裝了一個 JavaScript 引擎。

GetValidModes(NSObject, NSFontPanel)

封裝了一個 JavaScript 引擎。

ObjectDidBeginEditing(NSObject, INSEditor)

封裝了一個 JavaScript 引擎。

ObjectDidEndEditing(NSObject, INSEditor)

封裝了一個 JavaScript 引擎。

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

封裝了一個 JavaScript 引擎。

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

封裝了一個 JavaScript 引擎。

SetAccessibilityCustomRotors(NSObject, UIAccessibilityCustomRotor[])

設定適合物件this的UIAccessibilityCustomRotor物件陣列。

SetAccessibilityNextTextNavigationElement(NSObject, NSObject)

封裝了一個 JavaScript 引擎。

SetAccessibilityNextTextNavigationElementBlock(NSObject, AXObjectReturnBlock)

封裝了一個 JavaScript 引擎。

SetAccessibilityPreviousTextNavigationElement(NSObject, NSObject)

封裝了一個 JavaScript 引擎。

SetAccessibilityPreviousTextNavigationElementBlock(NSObject, AXObjectReturnBlock)

封裝了一個 JavaScript 引擎。

SetAccessibilityTextInputResponder(NSObject, IUITextInput)

封裝了一個 JavaScript 引擎。

SetAccessibilityTextInputResponderHandler(NSObject, UITextInputReturnHandler)

封裝了一個 JavaScript 引擎。

SetBrowserAccessibilityContainerType(NSObject, BEAccessibilityContainerType)

封裝了一個 JavaScript 引擎。

SetBrowserAccessibilityCurrentStatus(NSObject, String)

封裝了一個 JavaScript 引擎。

SetBrowserAccessibilityHasDomFocus(NSObject, Boolean)

封裝了一個 JavaScript 引擎。

SetBrowserAccessibilityIsRequired(NSObject, Boolean)

封裝了一個 JavaScript 引擎。

SetBrowserAccessibilityPressedState(NSObject, BEAccessibilityPressedState)

封裝了一個 JavaScript 引擎。

SetBrowserAccessibilityRoleDescription(NSObject, String)

封裝了一個 JavaScript 引擎。

SetBrowserAccessibilitySelectedTextRange(NSObject, NSRange)

封裝了一個 JavaScript 引擎。

SetBrowserAccessibilitySortDirection(NSObject, String)

封裝了一個 JavaScript 引擎。

SetSharedObservers(NSObject, NSKeyValueSharedObserversSnapshot)

封裝了一個 JavaScript 引擎。

ValidateToolbarItem(NSObject, NSToolbarItem)

封裝了一個 JavaScript 引擎。

適用於

另請參閱