如何在WP7 WebBrowser控件中注入Javascript
本文关键字:注入 Javascript 控件 WebBrowser WP7 | 更新日期: 2023-09-27 18:16:18
我可以通过这个链接在c#窗体的WebBrowser控件中注入JavaScript
如何在WebBrowser控件中注入JavaScript ?
但是我不能在WP7中这样做,请帮助我。
遗憾的是,WebBrowser.Document
在WP7上不可用。但是您可以使用InvokeScript
创建并调用JavaScript函数。请看这里,我是如何描述的。
简而言之:你不使用.Document
和c#,而是创建一个JavaScript代替。然后使用这个脚本作为参数调用eval
来调用它。这样的:
webBrowser1.InvokeScript("eval", " ...code goes here... ");
对于桌面WebBrowser
(WinForms/WPF),至少一个<script>
标签必须出现在InvokeScript("eval", ...)
工作的网页上。也就是说,如果页面不包含任何JavaScript(例如<body></body>
), eval
将无法正常工作。
我没有安装Windows Phone SDK/模拟器来验证这是否也是Windows Phone WebBrowser
的情况。
尽管如此,以下内容适用于Windows Store应用程序。诀窍是先使用this.webBrowser.InvokeScript("setTimeout", ...)
注入一些JavaScript。我正在使用它而不是execScript
,这是自IE11以来已弃用的。
async void MainPage_Loaded(object sender, RoutedEventArgs e)
{
// load a blank page
var tcsLoad = new TaskCompletionSource<object>();
this.webBrowser.NavigationCompleted += (s, eArgs) =>
tcsLoad.TrySetResult(Type.Missing);
this.webBrowser.NavigateToString("<body></body>");
await tcsLoad.Task;
// first add a script via "setTimeout", JavaScript gets initialized
var tcsInit = new TaskCompletionSource<object>();
this.webBrowser.ScriptNotify += (s, eArgs) =>
{
if (eArgs.Value == "initialized")
tcsInit.TrySetResult(Type.Missing);
};
this.webBrowser.InvokeScript("setTimeout",
new string[] { "window.external.notify('initialized')", "0" });
await tcsInit.Task;
// then use "eval"
this.webBrowser.InvokeScript("eval",
new string[] { "document.body.style.backgroundColor = 'yellow'" });
}
如果有人能确认这是否适用于WP WebBrowser
,我会很感激。LoadCompleted
应该用于WP而不是上面代码中的NavigationCompleted
, WebBrowser.IsScriptEnabled
必须设置为true
。