我可以通过此链接在C#windows窗体中的WebBrowser控件中注入JavaScript
How to inject JavaScript in WebBrowser control?
但我不能在WP7中这样做,请帮助我。
答案 0 :(得分:7)
不幸的是,{7}在WP7上无法使用WebBrowser.Document
。但您可以使用InvokeScript
创建和调用JavaScript函数。看看over here我在哪里描述。
简而言之:您不使用.Document
和C#,而是创建一段JavaScript。然后使用此脚本作为参数调用eval
以调用它。像这样:
webBrowser1.InvokeScript("eval", " ...code goes here... ");
答案 1 :(得分:1)
对于桌面WebBrowser
(WinForms / WPF),<script>
工作的网页上必须至少有一个InvokeScript("eval", ...)
标记。即,如果页面不包含任何JavaScript(例如<body></body>
),则eval
不会按原样运行。
我没有安装Windows Phone SDK /模拟器来验证Windows Phone WebBrowser
是否也是如此。
尽管如此,以下适用于Windows应用商店应用。诀窍是先使用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
。