2009-03-31 23 views
6

Tôi có hàm Javascript trả về innerHTML của div. Tôi đang cố gọi hàm này từ Actionscript và lưu trữ giá trị trả lại. Tôi biết rằng hàm Javascript đang được gọi vì có một cảnh báo hiển thị dữ liệu trả về, Dữ liệu được trả về cho Actionscript, tuy nhiên, là null. Tôi không chắc điều gì đang gây ra điều này. Dưới đây là một ví dụ mã của những gì tôi đang cố gắng để làm:ExternalInterface.call() không nhận được giá trị trả về

Javascript: 
function JSFunc() { 
    var x = document.getElementById("myDiv"); 
    alert(x.innerHTML); 
    return x.innerHTML; 
} 

Actionscript: 
import flash.external.*; 
if (ExternalInterface.available) { 
    var retData:Object = ExternalInterface.call("JSFunc"); 
    if(retData != null) { 
      textField.text = retData.toString(); 
    } else { 
      textField.text = "Returned Null"; 
    } 
} else { 
    textField.text = "External Interface not available"; 
} 

Như tôi đã nói trước đó, cảnh báo xuất hiện với những nội dung của div nhưng văn bản trong textfield phải lúc nào cũng "Returned Null", có nghĩa là ExternalInterface có sẵn. Tôi nên thêm rằng tôi chỉ có thể kiểm tra điều này trong IE7 và IE8. Bất kỳ lời khuyên nào về việc phải làm sẽ được đánh giá cao.

Trả lời

2

Nguồn của sự cố mà tôi đã gặp phải làm thẻ đối tượng mà tôi đang sử dụng để nhúng phim flash. Tôi đã sử dụng một thẻ theo ví dụ này http://www.w3schools.com/flash/flash_inhtml.asp, tôi đã thay đổi nó để phù hợp với ví dụ này: http://kb.adobe.com/selfservice/viewContent.do?externalId=tn_4150 và sau đó tôi đảm bảo rằng tôi đã thêm id vào đối tượng và mọi thứ đã hoạt động.

-1

Bạn nên sử dụng câu lệnh import

import flash.external.*; 
+0

Xin lỗi quên đề cập đến việc tôi đã làm điều đó. –

0

Hãy thử thêm as String cuộc gọi:

textField.text = ExternalInterface.call("JSFunc") as String; 
+0

Gave typecasting một shot nhưng không có con xúc xắc. –

0

Tôi cũng nhận thấy bạn có một lỗi đánh máy trong mã của bạn => TextField = textfield

+0

Xin lỗi vì mã lỗi là một ví dụ không phải là những gì tôi đang thực sự sử dụng. –

+0

Vâng, không có gì sai với mã đó, trừ khi một số phần khác của mã của bạn đang rối tung lên với nội dung textfield. – Claudio

0

Cố gắng lấy lại đối tượng từ cuộc gọi giao diện bên ngoài của bạn mà không cần truyền nó trước, và hãy xem nó trong trình gỡ lỗi. Nếu nó không phải là một chuỗi, cố gắng để đúc nó vào một chuỗi sẽ dẫn đến null. Điều này phải là một chuỗi, nhưng nó không làm tổn thương để xem những gì bạn đang thực sự nhận được trở lại trước khi bạn cố gắng làm việc với nó.

+0

Đối tượng là null, là trình gỡ lỗi đang nói với tôi. –

3

This is a working sample dựa trên mã bạn đã cung cấp. Bạn có thể nhấp chuột phải vào nó để xem nguồn. Tôi nghi ngờ vấn đề nằm trong HTML cho 'myDiv' hoặc khi bạn đang thực hiện cuộc gọi hành động.

+0

Cảm ơn bạn đã chỉ ra rằng bản thân mã không phải là vấn đề, tôi nghĩ rằng vấn đề có thể là với thẻ đối tượng mà tôi đã sử dụng để nhúng phim vào IE. Ngoài ra làm thế nào để tôi thấy javascript và div mà bạn đã sử dụng? –

+0

nm, tôi tìm thấy javascript và div. –

0

Dường như với tôi rằng vấn đề của bạn là từ javascript bạn đang trả về một chuỗi, thuộc tính innerHTML của phần tử myDiv của bạn. Trong ActionScript bạn đã datatyped biến mà ExternalInterface gọi trở lại như là một đối tượng, nhưng nó là một String. Có thể bạn đã bắt được điều này, nhưng tôi không thể nói là bạn chưa sửa đổi mã của mình.

//The following is an Object 
var x = document.getElementById("myDiv"); 

/* 
You are returning the innerHTML property of x, a string, but on the 
flash end your expecting an object in your actionscript. 
*/ 
return x.innerHTML; 

//The following seems incorrect to me. 
var retData:Object = ExternalInterface.call("JSFunc"); 

//Should be 
var retData:String = ExternalInterface.call("JSFunc"); 

Hy vọng điều này hữu ích, hãy cẩn thận.

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