使用多个window.location.href调用触发shouldStartLoadWithRequest

AlB*_*ebe 9 iphone uiwebview window.location

我试图通过UIWebView的shouldStartLoadWithRequest方法将多个内容从UIWebView内的网页传回我的iPhone应用程序.

基本上我的网页调用window.location.href ="command:// foo = bar",我能够拦截在我的应用程序中没问题.现在,如果我创建一个循环并立即执行多个window.location.href调用,那么shouldStartLoadWithRequest似乎只会被调用一次,并且它获得的调用是循环结束时window.location.href的最后一次触发.

Android的webview也会发生同样的事情,只会处理最后一个window.location.href.

AlB*_*ebe 41

iFrame = document.createElement("IFRAME");
iFrame.setAttribute("src", "command://foo=bar");
document.body.appendChild(iFrame); 
iFrame.parentNode.removeChild(iFrame);
iFrame = null;
Run Code Online (Sandbox Code Playgroud)

所以这创建了一个iframe,将其源代码设置为一个试图传递给应用程序的命令,然后一旦它附加到主体应该调用StartLoadWithRequest,然后我们从正文中删除iframe,并将其设置为null以释放记忆.

我还使用shouldOverrideUrlLoading在Android webview上测试了它,它也正常工作!

  • 自从我2年前发布以来,我想跟进.我写了一个Android和iPhone应用程序,它基本上是一个包含在本机应用程序中的webview.我使用这个解决方案,所以我可以从webview到本机应用程序进行通信,并且在过去的两年里,它的工作完美无缺,我的应用程序已下载超过500k +. (5认同)
  • 这个解决方案很丑陋,但它似乎是最不可思议的丑陋解决方案.似乎Javascript通过忽略随后被其他window.location调用替换的window.location调用来"优化".感谢您将我从一个非常痛苦的调试会话中解救出来! (3认同)