2012-01-29 36 views
10

Trên dự án gwt của tôi. tôi có một tập lệnh gọi từ điển:GWT chèn phần tử tập lệnh vào tệp html

<script type="text/javascript" src=conf/iw_dictionary.js></script> 

thay vì viết phần tử tập lệnh này trong tệp html. tôi muốn tiêm nó vào html từ điểm vào, trên tải mô-đun.

Tôi có thể làm như thế nào?

+0

Một câu hỏi tương tự cũng được hỏi: [GWT: trì hoãn tải các tài nguyên JS bên ngoài] (http://stackoverflow.com/q/7968831/320399) – blong

Trả lời

11

Sử dụng com.google.gwt.core.client.ScriptInjector, vì nó được tạo ra đặc biệt cho những thứ như thế này

ScriptInjector.fromUrl("conf/iw_dictionary.js").setCallback(
    new Callback<Void, Exception>() { 
    public void onFailure(Exception reason) { 
     Window.alert("Script load failed."); 
    } 
    public void onSuccess(Void result) { 
     Window.alert("Script load success."); 
    } 
    }).inject(); 
+0

Lớp 'ScriptInjector' có sẵn trong GWT_V2.7.0. Nếu tôi phải tiêm một tập tin javascript với GWT_V.1.x thì có thể hay không? –

+0

Có thể, nhưng bạn sẽ phải sử dụng các giải pháp từ các câu trả lời dưới đây. Bạn có thể sử dụng câu trả lời do Dom cung cấp (nhưng bạn sẽ phải sử dụng api cũ hơn để tạo thành phần tử) hoặc câu trả lời của Thomas Broyer (Tôi không chắc chắn 100% nếu nó đang làm việc cho GWT 1.XX) – jusio

+0

Tôi đang thực hiện bảo vệ CSRF trong ứng dụng web của tôi. Tôi đã thực hiện tất cả cấu hình được yêu cầu và tôi có thể thấy mã thông báo được tạo/chèn vào tiêu đề yêu cầu. Để tôi nói cho bạn kiến ​​trúc của ứng dụng một chút, tôi có các trang JSP gọi điện đến các dịch vụ bằng Ajax để lấy dữ liệu và hiển thị trong giao diện người dùng. Câu hỏi của tôi ở đây là "Chúng tôi có thể bảo vệ các cuộc gọi dịch vụ cũng với bảo vệ CSRF không?" Nếu nó là có thể thì làm thế nào tôi có thể làm điều này bởi vì nó sẽ không đến lớp CsrfGuardFilter.java khi tôi đang gỡ lỗi thực hiện. Cảm ơn sự giúp đỡ của bạn. –

5

Về cơ bản bạn tiêm các yếu tố kịch bản trong onModuleLoad của bạn():

Element head = Document.get().getElementsByTagName("head").getItem(0); 
    ScriptElement sce = Document.get().createScriptElement(); 
    sce.setType("text/javascript"); 
    sce.setSrc("conf/iw_dictionary.js"); 
    head.appendChild(sce); 

Trình duyệt sẽ tự động tải nó càng sớm càng nó tiêm.

+1

Hữu ích cho những người trong chúng ta sử dụng 2,3 (ScriptInjector được giới thiệu trong 2.4) –

+0

Tôi đang triển khai tính năng bảo vệ CSRF trong ứng dụng web của mình. Tôi đã thực hiện tất cả cấu hình được yêu cầu và tôi có thể thấy mã thông báo được tạo/chèn vào tiêu đề yêu cầu. Để tôi nói cho bạn kiến ​​trúc của ứng dụng một chút, tôi có các trang JSP gọi điện đến các dịch vụ bằng Ajax để lấy dữ liệu và hiển thị trong giao diện người dùng. Câu hỏi của tôi ở đây là "Chúng tôi có thể bảo vệ các cuộc gọi dịch vụ cũng với bảo vệ CSRF không?" Nếu nó là có thể thì làm thế nào tôi có thể làm điều này bởi vì nó sẽ không đến lớp CsrfGuardFilter.java khi tôi đang gỡ lỗi thực hiện. Cảm ơn sự giúp đỡ của bạn. –

3

Bạn chỉ có thể thêm một <script> element in your *.gwt.xml file.

<script src='conf/iw_dictionary.js' /> 

onModuleLoad sẽ chỉ được gọi một lần kịch bản được nạp (như nếu bạn đã có nó trong trang html của bạn).

+0

Như tôi đã hiểu từ bạn rằng tôi phải đặt '

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