2

我一直试图从 WP8 上的网络浏览器获取元标记信息,但没有成功。

我试过了:

var myDesc = (string)myBrowser.InvokeScript("eval", " $('meta[name=description]').attr('content');");

和这个...

string jsString = "";
jsString += "  var metas = document.getElementsByTagName('meta'); ";
jsString += "  var data = 'test'; ";
jsString += "  var mLen = metas.length; ";
jsString += "  for(var i=0;i<mLen;i++){ ";
jsString += "    if(metas[i].getAttribute('name').toLowerCase() == 'description'){ ";
jsString += "      data = metas[i].getAttribute('content'); ";
jsString += "    } ";
jsString += "  } ";

myBrowser.InvokeScript("eval", new string[] { jsString });
var myDesc = (string)myBrowser.InvokeScript("eval", "data;");

和这个...

myBrowser.InvokeScript("eval", new string[] { "var desc = document.getElementsByName('description')[0].getAttribute('content');" });

并以错误结束:

{System.SystemException:发生未知错误。错误:80020101. 在 Microsoft.Phone.Controls.WebBrowserInterop.InvokeScript(String scriptName, String[] args) 在 Microsoft.Phone.Controls.WebBrowser.InvokeScript(String scriptName) 的 Microsoft.Phone.Controls.NativeMethods.ValidateHResult(Int32 hr) , 字符串 [] 参数) ...

有人可以帮助我吗?

此致!!

4

1 回答 1

0

首先在 xaml 中添加 WebBrowser 并将 IsScriptEnabled 设置为 true。

<phone:WebBrowser Name="webBrowser" Source="http://www.baidu.com/" IsScriptEnabled="True"/>

第二次注册事件:LoadedCompeted 和 ScriptNotify

webBrowser.LoadCompleted += webBrowser_LoadCompleted;
webBrowser.ScriptNotify += webBrowser_ScriptNotify;

第三次注入javascript代码

void webBrowser_LoadCompleted(object sender, NavigationEventArgs e)
{
    webBrowser.InvokeScript("eval",@"window.Init=function(){var metas=document.getElementsByTagName('meta');var str='';for(i=0;i<metas.length;i++){str+='name:'+metas[i].getAttribute('name')+',content:'+metas[i].getAttribute('content')+';;}window.external.notify(str);}");
    webBrowser.InvokeScript("Init");
}

最后你在 webBrowser_ScriptNotify 事件中得到你的元信息

void webBrowser_ScriptNotify(object sender, NotifyEventArgs e)
{
    System.Diagnostics.Debug.WriteLine(e.Value);
}

希望这会有所帮助:D

于 2014-01-23T08:25:37.253 回答