【问题标题】:Dynamically injecting javascript in windows phone 8 application在 windows phone 8 应用程序中动态注入 javascript
【发布时间】:2014-10-07 18:17:02
【问题描述】:

我只是想在我的网络浏览器的内容中添加一些动态 javascript。 我的场景是,我想显示一个广告,该广告映射到用户从手机屏幕输入的 zoneID。 更准确地说,我只想添加以下 javascript

    <script src="http://rq.vserv.mobi/delivery/js.php?zoneid=d03e63db&amp;vr=S-JS-1.0.0"></script>&nbsp;</div>

其中 zoneid 将根据用户输入动态变化。

因为我以前从未使用过 JS,所以我搜索了很多,我得到了这篇文章 -

http://matthiasshapiro.com/2012/11/26/windows-phone-html-5-app-basics/

我尝试了两种方法来实现它 第一个是我试图导航到硬编码的 HTML 内容,包括脚本-

     webBrowser.NavigateToString(string.Format("<html><head><meta name=\"viewport\" content=\"width=device-width,height=device-height,user-scalable=no\"><script type=\"text/javascript\" src=\"http://rq.vserv.mobi/delivery/js.php?zoneid={0}&amp;vr=S-JS-1.0.0\"></script></head><body></body></html>",p_zoneID));

第二个是有一个本地HTML页面,在webbrowser的Loaded事件上加载它,然后将脚本注入其中-

     webBrowser.InvokeScript("eval",
                new string[] { "document.getElementById('dynamicTitle').innerHTML = '" + javascript_tag + "';" });

当我收到广告时,这两种方法都适用于第二种情况,该广告是可点击的,因为我正在获取与该广告映射的整个脚本。(我使用网络浏览器的 SaveToString() 方法对其进行了检查。)

但问题是,在第一种情况下,我收到的广告不可点击,因为与之相关的脚本不存在。(在 HTML 页面的内容中)(也使用 SaveToString() 进行了检查;)

我尝试了很多,但找不到任何线索。我现在应该采取什么方法来了解为什么该广告不可点击以及为什么我没有将脚本映射到它。

如果有建议,我也可以在这两种情况下发布 HTML 内容。 谢谢提前,请帮我解决这个问题,因为我被困在这一点上,需要澄清一些事情。

【问题讨论】:

  • 让我澄清一下:您想要的是在用户进入您屏幕上的某个区域时显示广告。因此,我不明白为什么第二种情况对您不起作用?无论如何,您的 HTML 会有所帮助。
  • 当您在浏览器中访问 javascript url "rq.vserv.mobi/delivery/… 时,您会收到什么 html?请将结果粘贴到您的问题中,我会尽力提供帮助
  • 旁注:eval == evil 在您 100% 确定自己知道自己在做什么之前,请勿使用此标签。

标签: c# javascript html windows-phone-8


【解决方案1】:

在第一种情况下,您将在其中包含 javascript 源的 Web 浏览器控件中注入完整的 html,但您从未将其分配给“dynamicTitle”。 在第二种情况下,您正在使用 javascript 的 eval 方法执行此操作,并且变量“javascript_tag”中的字符串被分配给“dynamicTitle”的 innerHTML。

您也需要在第一种方法中执行相同的操作,但是除了作为字符串之外,无法直接在 windows phone 中访问 html 文档。下面是代码:

添加对 HtmlAgilityPack 的引用。按照这个链接: http://www.tareqateik.com/html-agility-pack%E2%80%93windows-phone-8#.U_eAtPmSySp

//fetch the html as string
string htmlAsString = webBrowser.SaveToString();
//create an html document from the string 
HtmlDocument htmlDocument = new HtmlDocument(); 
htmlDocument.LoadHtml(htmlPage);
htmlDocument.GetElementbyId("dynamicTitle").InnerHtml = javascript_tag;

在此之后,您需要再次在 webBrowser 中加载编辑后的 ​​html 文档。

【讨论】:

    【解决方案2】:

    您可以使用 JS 将脚本附加到头部,它们将按应有的方式运行,here is a great answer on StackOverflow 展示了它是如何通过工作示例完成的,它使用纯 JavaScript。

    希望对你有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-25
      相关资源
      最近更新 更多