WP8 - 从WebBrowser获取元标记信息

时间:2013-12-20 16:05:44

标签: windows-phone-8 meta invokescript

我一直试图从WP8上的webbrowser获取元标记信息,但没有成功。

我试过:

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.NativeMethods.ValidateHResult(Int32 hr)at at   Microsoft.Phone.Controls.WebBrowserInterop.InvokeScript(字符串   scriptName,String [] args)at   Microsoft.Phone.Controls.WebBrowser.InvokeScript(String scriptName,   String [] args)...

有人能帮助我吗?

最诚挚的问候!!

1 个答案:

答案 0 :(得分: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