windows phone 8 如何在网页浏览器控件中显示htmlcontent 字符串?
How to display htmlcontent string in web browser control in windows phone 8?
我有 Web 浏览器控件,我在其中使用 javascript 和 NavigateToString() 方法显示 Htmlcontent。它工作正常,除非在我获取 Htmlcontent 的服务器上添加了 table 标记。到目前为止我已经尝试了下面的代码
string notifyJS = @"<script type='text/javascript' language='javascript'>
window.onload = function() {
var links = document.getElementsByTagName('a');
for(var i=0;i<links.length;i++) {
links[i].onclick = function() {
window.external.Notify(this.href);
}
}
}
</script>";
var htmlContent = string.Format("<html><head>{2}</head>" +
"<body style=\"margin:25px 25px 75px;padding:0px;background-color:{1};\" " +
"{0}</body></html>",
_selectedTab.HTML_CONTENT,
_selectedTab.TAB_BG_COLOR,
notifyJS);
//var htmlContent = _selectedTab.HTML_CONTENT;
HtmlContentView.NavigateToString(htmlContent);
HtmlContentView.ScriptNotify += HtmlContentView_ScriptNotify;
HtmlContentView.Navigating += HtmlContentView_Navigating;
HtmlContentView.LoadCompleted += HtmlContentView_LoadCompleted;
}
void HtmlContentView_LoadCompleted(object sender, NavigationEventArgs e)
{
HtmlContentView.InvokeScript("execScript", new string[] { "document.onselectstart=function(){return false;};document.ondragstart=function(){return false;}" });
}
void HtmlContentView_Navigating(object sender, NavigatingEventArgs e)
{
e.Cancel = true;
}
void HtmlContentView_ScriptNotify(object sender, NotifyEventArgs e)
{
if (!string.IsNullOrEmpty(e.Value))
{
string href = e.Value.ToLower();
if (href.StartsWith("mailto:"))
{
EmailComposeTask email = new EmailComposeTask();
email.To = href.Replace("mailto:", string.Empty);
email.Show();
}
else if (href.StartsWith("tel:"))
{
PhoneCallTask call = new PhoneCallTask();
call.PhoneNumber = href.Replace("tel:", string.Empty);
call.Show();
}
else
{
WebBrowserTask browserTask = new WebBrowserTask();
browserTask.Uri = new Uri(e.Value);
browserTask.Show();
}
}
}
谁能提出为什么 table 标签没有被正确识别的原因?我在 Android 中进行了同样的检查,它工作得非常好。
请任何人提出解决方案。
WP8 中浏览器控件的 NavigateToString() 函数无法正常工作是一个已知问题。尝试使用 CSS 和 DIV,因为目前没有其他解决方案。
我希望这能回答你的问题。
最后,我从中得到了解决方案link
Solution
我已经根据他们的建议添加了元标记,效果很好。
var htmlContent = string.Format("<html><head>{2}<meta name='viewport' content='inital-scale=1.0,maximum-scale=1.0, user-scalable=no' /></head>" +
"<body style=\"background-color:{1};\"" +
"{0}</body></html>",
_selectedTab.HTML_CONTENT,
_selectedTab.TAB_BG_COLOR,
notifyJS);
//var htmlContent = _selectedTab.HTML_CONTENT;
HtmlContentView.NavigateToString(htmlContent);
希望对大家有所帮助。
我有 Web 浏览器控件,我在其中使用 javascript 和 NavigateToString() 方法显示 Htmlcontent。它工作正常,除非在我获取 Htmlcontent 的服务器上添加了 table 标记。到目前为止我已经尝试了下面的代码
string notifyJS = @"<script type='text/javascript' language='javascript'>
window.onload = function() {
var links = document.getElementsByTagName('a');
for(var i=0;i<links.length;i++) {
links[i].onclick = function() {
window.external.Notify(this.href);
}
}
}
</script>";
var htmlContent = string.Format("<html><head>{2}</head>" +
"<body style=\"margin:25px 25px 75px;padding:0px;background-color:{1};\" " +
"{0}</body></html>",
_selectedTab.HTML_CONTENT,
_selectedTab.TAB_BG_COLOR,
notifyJS);
//var htmlContent = _selectedTab.HTML_CONTENT;
HtmlContentView.NavigateToString(htmlContent);
HtmlContentView.ScriptNotify += HtmlContentView_ScriptNotify;
HtmlContentView.Navigating += HtmlContentView_Navigating;
HtmlContentView.LoadCompleted += HtmlContentView_LoadCompleted;
}
void HtmlContentView_LoadCompleted(object sender, NavigationEventArgs e)
{
HtmlContentView.InvokeScript("execScript", new string[] { "document.onselectstart=function(){return false;};document.ondragstart=function(){return false;}" });
}
void HtmlContentView_Navigating(object sender, NavigatingEventArgs e)
{
e.Cancel = true;
}
void HtmlContentView_ScriptNotify(object sender, NotifyEventArgs e)
{
if (!string.IsNullOrEmpty(e.Value))
{
string href = e.Value.ToLower();
if (href.StartsWith("mailto:"))
{
EmailComposeTask email = new EmailComposeTask();
email.To = href.Replace("mailto:", string.Empty);
email.Show();
}
else if (href.StartsWith("tel:"))
{
PhoneCallTask call = new PhoneCallTask();
call.PhoneNumber = href.Replace("tel:", string.Empty);
call.Show();
}
else
{
WebBrowserTask browserTask = new WebBrowserTask();
browserTask.Uri = new Uri(e.Value);
browserTask.Show();
}
}
}
谁能提出为什么 table 标签没有被正确识别的原因?我在 Android 中进行了同样的检查,它工作得非常好。
请任何人提出解决方案。
WP8 中浏览器控件的 NavigateToString() 函数无法正常工作是一个已知问题。尝试使用 CSS 和 DIV,因为目前没有其他解决方案。
我希望这能回答你的问题。
最后,我从中得到了解决方案link Solution
我已经根据他们的建议添加了元标记,效果很好。
var htmlContent = string.Format("<html><head>{2}<meta name='viewport' content='inital-scale=1.0,maximum-scale=1.0, user-scalable=no' /></head>" +
"<body style=\"background-color:{1};\"" +
"{0}</body></html>",
_selectedTab.HTML_CONTENT,
_selectedTab.TAB_BG_COLOR,
notifyJS);
//var htmlContent = _selectedTab.HTML_CONTENT;
HtmlContentView.NavigateToString(htmlContent);
希望对大家有所帮助。