Mik*_*ant 7 javascript c# cordova windows-phone-8
我正在使用cordova/phonegap制作一个Windows手机应用程序,我正试图在事件发生时从C#调用脚本.
反正有没有这样做?
这是我到目前为止的课程.
public void register(string options)
{
// This is executed asynchronously
if (!TryFindChannel())
DoConnect();
}
void httpChannel_ChannelUriUpdated(object sender, NotificationChannelUriEventArgs e)
{
// Finished asynchronous task in "register" method
Trace("Channel opened. Got Uri:\n" + httpChannel.ChannelUri.ToString());
SaveChannelInfo();
Trace("Subscribing to channel events");
SubscribeToService();
SubscribeToNotifications();
// SEND CHANNEL URI TO JAVASCRIPT
}
Run Code Online (Sandbox Code Playgroud)
尝试:
webBrowser.InvokeScript("myFunction", "one", "two", "three");
Run Code Online (Sandbox Code Playgroud)
InvokeScript执行当前加载的文档中定义的脚本函数,并将函数传递给字符串参数数组.
http://msdn.microsoft.com/en-us/library/windowsphone/develop/ff402838%28v=vs.105%29.aspx
显然,您必须JavaScript在加载的文档中定义函数.
根据您的观点,它可能会像这样工作:
this.CordovaView.Browser.InvokeScript("eval", new string[] { "yourJavascriptFunction(); " });
Run Code Online (Sandbox Code Playgroud)
我找到了一种解决方案,诚然不是最好的解决方案,但对我有用。
我创建了一个名为 WebViewHandler 的单例类,如下所示
class WebViewHandler
{
private static WebViewHandler instance;
public bool isWebViewReady { get { return webView != null; } }
public WPCordovaClassLib.CordovaView webView;
private WebViewHandler()
{
}
public void setWebView(ref WPCordovaClassLib.CordovaView webView)
{
this.webView = webView;
}
public static WebViewHandler getInstance()
{
if(instance == null){
instance = new WebViewHandler();
}
return instance;
}
}
Run Code Online (Sandbox Code Playgroud)
然后我在主页的构造函数中设置 webview,如下所示:
public HomePage()
{
InitializeComponent();
CordovaView.Loaded += CordovaView_Loaded;
WebViewHandler.getInstance().setWebView(ref CordovaView);
}
Run Code Online (Sandbox Code Playgroud)
设置 WebView 后,我可以从任何其他类调用 InvokeScript:
WebViewHandler.getInstance().webView.CordovaBrowser.InvokeScript("MyJavaScriptFunctionThatIWishToCall");
Run Code Online (Sandbox Code Playgroud)