gpt4 book ai didi

javascript - 将外部 Javascript 文件注入(inject) html 页面并在其上执行方法 WP8 Webbrowser

转载 作者:行者123 更新时间:2023-11-29 15:40:24 26 4
gpt4 key购买 nike

我正在为在 WP8 应用程序中的 Webbrowser 控件上执行 Javascript 方法而苦苦挣扎。我使用的 XAML 是

<phone:WebBrowser IsScriptEnabled="True"  x:Name="mainBrowserControl"  Grid.Row="2"/>            

在按钮点击事件中,我将外部 javascript 文件 testjs.js(该文件是应用程序包的一部分,位于 xap 文件中)添加到当前加载的 html 页面的头部,如

        string root = Package.Current.InstalledLocation.Path;           
string jsfile_path = string.Format("{0}/testjs.js", root);

var script = string.Format(@"var script=document.createElement('script');
script.src=""{0}"";
document.getElementsByTagName('head')[0].appendChild(script);", jsfile_path);
mainBrowserControl.InvokeScript("eval", script);

然后在另一个按钮上单击,即使我尝试在 testjs.js 文件中执行一个 javascript 方法,例如

mainBrowserControl.InvokeScript("eval", "callMe();");

但它返回错误

An exception of type 'System.SystemException' occurred in Microsoft.Phone.Interop.ni.dll but was not handled in user code

Additional information: An unknown error has occurred. Error: 80020101.

testjs.js文件里面的内容就是3个简单的函数。我的最终目标是与我的应用程序中的外部 javascript 文件(如 testjs.js)进行交互(向 javascript 函数发送和接收值)

 function callMe() {   
alert("hello called");
}
function showSum(val1, val2) {
alert(val1 + val2);
}
function addTwo(val1,val2) {
return val1+val2;
}

我如何从我的 Windows Phone 应用程序调用 testjs.js 上的这些方法

最佳答案

更新:请参阅下面来自 Noseratio 的评论和链接,这仅在您要调用脚本的页面的头部已经有一个 <script> 标记时才有效。此标签可以为空,但必须存在。

在 Windows Phone 版本的网络浏览器中,任何调用 JavaScript 的尝试都必须在页面加载完成后进行。如果您在页面处于任何其他状态时尝试调用 JS,则会发生您收到的错误。

在您的 XAML 中,为“LoadCompleted”事件添加处理程序,如下所示:

<phone:WebBrowser IsScriptEnabled="True" LoadCompleted="DoneLoaded"  x:Name="mainBrowserControl"  Grid.Row="2"/>

将您的第二个按钮设置为“禁用”(Visibility.Collapsed),这样用户就无法点击它。然后,在页面的代码隐藏中,实现处理程序

    private void DoneLoaded(object sender, NavigationEventArgs e)
{
Debug.WriteLine("Loading Complete: "+e.Uri);
if (e.Uri.ToString().Equals("/the_url_of_the_page_with_embedded_js.html"))
// Enable the button that will invoke the JS
// Or, simply perform the InvokeScript here
}
}

这时候就可以Navigate/NavigateToString到包含JS的页面了。加载完成后,上面的事件将触发并启用您的“执行”按钮。页面加载完成后,Invoke 应该不会再吐了。当然,这是假设 JavaScript 中没有错误。

希望这对您有所帮助!

关于javascript - 将外部 Javascript 文件注入(inject) html 页面并在其上执行方法 WP8 Webbrowser,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20094656/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com