我们有一个原生的ios应用程序,它显示带有HTML网页和两个iframe的Web视图。在这些iframe中,我们从位于应用程序资源中的HTML文件中显示我们的文章。在文章中,通常有javascript脚本同时在两篇文章上运行。例如,将文本的某些部分设为粗体。为此,它列出了具有特定类的所有元素并修改其CSS样式。
$(".question").length()
会在iOS上的两个iframe中返回包含类.question
的元素数量,在那里它只返回Android上当前iframe的元素。通过"当前"我指的是用户与之交互以启动脚本的那个。
我们还要求发布Android应用程序。 这一切都很顺利,直到我测试了一篇文章,其中javascript必须在两个iframe上运行。不幸的是,它只能访问一个iframe中的元素。
有没有什么办法可以让它在不改变附加到文章的javascripts的代码的情况下工作?我没有权限[除了它可能有成千上万的文章有大量的自定义javascripts来更新]。
谢谢
答案 0 :(得分:0)
这是我管理类似案件的方式
webview.loadDataWithBaseURL("file:///android_asset/", your_html_as_string_here, "text/html", "utf-8", null);
webview.getSettings().setJavaScriptEnabled(true); // enable javascript
webview.addJavascriptInterface(new WebViewJavaScriptInterface(getActivity()), "app");
并且必须创建一个内部类并将javascript界面中提到的相同函数调用为'app.function1'
public class WebViewJavaScriptInterface {
private Context context;
/*
* Need a reference to the context in order to sent a post message l
*/
public WebViewJavaScriptInterface(Context context) {
this.context = context;
}
/*
* This method can be called from Android. @JavascriptInterface
* required after SDK version 17.
*/
@JavascriptInterface
public void function1() {
ll_translucent.setVisibility(View.VISIBLE);
}
/*
* This method can be called from Android. @JavascriptInterface
* required after SDK version 17.
*/
@JavascriptInterface
public void function2() {
new CommonActions(getActivity()).showSnackToast(verticalSeekBar, "Purchase Episode to read Further");
}
}