如何在UIWebView-iOS加载的iframe中注入javascript
我正在如何在UIWebView-iOS加载的iframe中注入javascript,javascript,ios,iframe,uiwebview,Javascript,Ios,Iframe,Uiwebview,我正在UIWebView上收听此委托方法: - (void)webViewDidFinishLoad:(UIWebView *)aWebView 在此基础上,我使用 [aWebView stringByEvaluatingJavaScriptFromString:myscript]; 虽然委托方法适合侦听iframe请求的结尾,但我的js似乎不适用于iframe。它适用于uiwebview的主文档 有没有办法做到这一点:如何在iOSUIWebView对象的iFrame上注入js 谢谢你的建议
UIWebView
上收听此委托方法:
- (void)webViewDidFinishLoad:(UIWebView *)aWebView
在此基础上,我使用
[aWebView stringByEvaluatingJavaScriptFromString:myscript];
虽然委托方法适合侦听iframe请求的结尾,但我的js似乎不适用于iframe。它适用于uiwebview的主文档
有没有办法做到这一点:如何在iOSUIWebView
对象的iFrame上注入js
谢谢你的建议。问题在你的JS中。您可以在iframe对象上运行操作,在问题中的“myscript”中,您需要在
document.getElementsByTagName('iframe')[0].contentWindow
反对。或者,如果您没有引用UIWebView中的第一个iframe,请使用另一个选择器来引用您尝试引用的iframe。除非有我不知道的iOS API,您只能通过调用
stringByEvaluatingJavaScriptFromString:myscript
在顶级文档的上下文中执行Javascript
幸运的是,自2013年(最后一个答案编写时)以来,我们现在有了和,它允许您在iframe中生成一个不可提取的密钥,并使用将公钥传递给iOS。每个iframe都应该接收一个唯一的id,并通过窗口.location.hash
或postMessage
告知它是什么。它应该将这个id发送到本机代码,以及本机调用的唯一索引/键和用于编码内容的公钥。(本机代码还可以检查消息上的iframeInfo
,以确保请求来自正确的域。)最后,本机代码可以在WebView上调用stringByEvaluatingJavaScriptFromString:myscript
,并传递使用公钥加密的有效负载,连同iframe的id和all的索引/键一起,使用postMessage
发送到iframe。iframe将对其进行解码,并调用相应的回调函数。您可以使用iframes以这种方式实现一个完整的类似Cordova的桥接器
请注意,顶级文档的作者选择呈现iframe,因此没有动机干扰消息的传递。但是,消息必须加密,因为他们可能有强烈的动机窃取信息
PS:如果您担心量子计算机破坏加密,那么您可能必须使用对称密钥而不是公私密钥对,或者干脆不将公钥与有效负载一起发送:)由于跨域安全限制而无法访问的iFrame如何?