2017-03-09 17 views
9

Chúng tôi có ứng dụng ios gốc, hiển thị chế độ xem web với trang web HTML và hai iframe. Bên trong các iframe đó, chúng tôi hiển thị các bài viết của chúng tôi từ các tệp HTML nằm trong tài nguyên của ứng dụng. Bên trong các bài báo, thường có các tập lệnh javascript hoạt động trên cả hai bài viết cùng một lúc. Ví dụ, làm cho một phần của văn bản in đậm. Để làm điều này, nó liệt kê tất cả các phần tử với một lớp cụ thể và sửa đổi kiểu CSS của nó.Android WebView - các lớp truy cập từ một iframe bên trong iframe khác

$(".question").length() 

sẽ trở về số phần tử với lớp .question trong cả iframe trên iOS, nơi nó sẽ chỉ trả lại các yếu tố từ iframe hiện trên Android. Bởi "hiện tại" tôi có nghĩa là người dùng tương tác với để bắt đầu tập lệnh.

Chúng tôi cũng có yêu cầu phát hành ứng dụng android. Tất cả đều ổn, cho đến khi tôi thử nghiệm một bài viết, trong đó javascript phải hoạt động trên cả hai khung nội tuyến. Thật không may, nó chỉ có thể truy cập các phần tử từ một iframe.

Có cách nào tôi có thể làm cho nó hoạt động mà không thay đổi mã của các javascripts gắn liền với các bài viết không? Tôi không có thẩm quyền ở đó [ngoài ra nó có thể là hàng ngàn bài báo với nhiều javascripts tùy chỉnh để cập nhật].

Cảm ơn bạn

+0

bạn đã xem [this] (https://stackoverflow.com/questions/11955413/accessing-elements-of-one-iframe-from-another-iframe) và [this] (https: // stackoverflow. com/questions/4132411/how-to-call-a- function-in-an-iframe-from-the-parent-page)? –

+0

Vâng, nó sẽ yêu cầu thay đổi trong nội dung mà tôi không có cách nào thay đổi. – Krystian

Trả lời

0

Đây là cách tôi quản lý một trường hợp tương tự

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"); 

và phải tạo một lớp bên trong và gọi cùng một chức năng như đã đề cập trong javascript giao diện như '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"); 
     } 
    } 
+0

Tôi thành thật không hiểu ví dụ của bạn. Bạn chỉ cần tải một trang web và hiển thị hai hàm giao diện javascript. Làm cách nào để giúp truy cập nội dung của một iframe từ iframe khác? – Krystian

Các vấn đề liên quan