我正在使用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
}
答案 0 :(得分:9)
尝试:
webBrowser.InvokeScript("myFunction", "one", "two", "three");
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(); " });
答案 1 :(得分:4)
我找到了一个解决方案,当然不是最好的解决方案,但对我有用。
我创建了一个名为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;
}
}
然后我在HomePage的构造函数中设置webview,如下所示:
public HomePage()
{
InitializeComponent();
CordovaView.Loaded += CordovaView_Loaded;
WebViewHandler.getInstance().setWebView(ref CordovaView);
}
一旦设置了WebView,我就可以从任何其他类调用InvokeScript:
WebViewHandler.getInstance().webView.CordovaBrowser.InvokeScript("MyJavaScriptFunctionThatIWishToCall");
答案 2 :(得分:1)
你可以使用DispatchCommandResult();如cordova文件中所述。这样你就可以调用c#方法,在回调中发送你需要的任何内容,然后只需在javascript中执行javascript。
答案 3 :(得分:0)
试试这个例子:
string str="<script>alert(\"ok\");</script>";
Page.ClientScript.RegisterStartupScript(this.GetType(), "Script", str, false);