首页 > 解决方案 > 在没有 webview 的情况下快速评估 Javascript 代码

问题描述

所以我正在编写一个动态加载广告的广播电台应用程序。最初的解决方案是在 WebView 中访问https://cdn.azureradio.com/invocation/clearwater/iOS/the_beat.html,然后我使用 Swift Soup 并在 webview 中添加我需要的变量。但是,我最近发现Web Views不会在后台加载请求,IE:如果设备被锁定。

这显然提出了一个问题。话虽如此,我决定发出一个 HTTP 请求。我调用了 url 并得到了一个 Javascript 字符串。我需要知道一种方法来运行 javascript 代码并将它生成的 html 放入一个变量中,以便我可以给变量加汤。目前,我得到的 Javascript 代码是

<!-- Azure Spot Server Javascript Tag - Generated with Revive Adserver v5.0.5 -->
<script type='text/javascript'><!--//<![CDATA[
   var m3_u = (location.protocol=='https:'?'https://azureradio.com/ads/www/delivery/ajs.php':'http://azureradio.com/ads/www/delivery/ajs.php');
   var m3_r = Math.floor(Math.random()*99999999999);
   if (!document.MAX_used) document.MAX_used = ',';
   document.write ("<scr"+"ipt type='text/javascript' src='"+m3_u);
   document.write ("?zoneid=7&amp;target=_top");
   document.write ('&amp;cb=' + m3_r);
   if (document.MAX_used != ',') document.write ("&amp;exclude=" + document.MAX_used);
   document.write (document.charset ? '&amp;charset='+document.charset : (document.characterSet ? '&amp;charset='+document.characterSet : ''));
   document.write ("&amp;loc=" + escape(window.location));
   if (document.referrer) document.write ("&amp;referer=" + escape(document.referrer));
   if (document.context) document.write ("&context=" + escape(document.context));
   if (document.mmm_fo) document.write ("&amp;mmm_fo=1");
   document.write ("'><\/scr"+"ipt>");
//]]>--></script>

我不知道如何在不使用的情况下快速运行此代码以生成 URLwebView.evaluateJavaScript("document.documentElement.outerHTML.toString()") 非常感谢。

标签: javascriptswift

解决方案


您可以使用JavaScriptCore,这是一种无需实际使用 Web 视图实例即可直接访问 WebKit 的 JavaScript 引擎的方法。

import JavaScriptCore

let context = JSContext()!
let value = context.evaluateScript(yourJavaScriptString)
print(value)

返回的value是被评估的最后一个元素的值。


推荐阅读