0

我正在使用 video.js 实现一个 youtube 视频播放器,我在 js 中动态传递 url,并让 video.js 播放视频。我想做的是让js在视频结束后通知android端,所以我添加了end事件来调用android方法。但它不起作用,有人知道这里有什么问题吗?

我在android端实现了一个jsinterface“AndroidFunction”

安卓端:

public class MainActivity extends Activity {
/**
 * Called when the activity is first created.
 */
WebView webView;
String ytUrl;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.activity_main);
    final RelativeLayout mainLayout = (RelativeLayout) findViewById(R.id.layout1);
    LayoutParams params = new RelativeLayout.LayoutParams(
            RelativeLayout.LayoutParams.MATCH_PARENT,
            RelativeLayout.LayoutParams.MATCH_PARENT);
    mainLayout.setLayoutParams(params);
    ytUrl = "http://www.youtube.com/watch?v=2NS1umhAAeg";
    webView = new WebView(this);
    WebSettings webSettings = webView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    webSettings.setPluginsEnabled(true);
    final MyJavaScriptInterface jsInterface = new MyJavaScriptInterface(
            this);
    webView.addJavascriptInterface(jsInterface, "AndroidFunction");
    webView.setWebChromeClient(new WebChromeClient());
    webView.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            webView.setClickable(false);
            return false;
        }

    });
    webView.setWebViewClient(new WebViewClient() {
        boolean calledOnce;

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            return false;
        }

        /*
         * (non-Javadoc)
         * 
         * @see
         * android.webkit.WebViewClient#onPageFinished(android.webkit.WebView
         * , java.lang.String)
         */
        @Override
        public void onPageFinished(WebView view, String url) {
            if (calledOnce == false) {
                webView.loadUrl("javascript:callFromActivity(\"" + ytUrl
                        + "\")");
            }
            calledOnce = true;
        }
    });

    webView.loadUrl("file:///android_asset/123.html");

    mainLayout.addView(webView);
}

public class MyJavaScriptInterface {
    Context mContext;

    MyJavaScriptInterface(Context c) {
        mContext = c;
    }

    public void showToast(String toast) {
        Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
    }

    public void openAndroidDialog() {
        AlertDialog.Builder myDialog = new AlertDialog.Builder(
                MainActivity.this);
        myDialog.setTitle("Notice");
        myDialog.setMessage("Android side has been called");
        myDialog.setPositiveButton("ON", null);
        myDialog.show();
    }
}
}

在js端,我实现了一个callAndroid函数来调用android JsInterface "AndroidFunction",并使用addEvent("ended", callAndroid)调用该函数

js端:

<script language="javascript">
    var url;

    function callFromActivity(msg){
        url = msg;
        var videoEl = document.createElement("video");
        videoEl.className= "video-js vjs-default-skin";
        videoEl.width = "360";
        videoEl.height = "595";
        videoEl.setAttribute("id", "example_video_1");
        document.getElementById("vid").appendChild(videoEl);

        _V_("example_video_1").ready(function(){

            var myPlayer = this;
            myPlayer.src({ type: "video/youtube", src: url});               
            var mainTrack = myPlayer.values.src;
            var startedOnce = false;
            var endedOnce = false;
            var firstQuartileOnce = false;
            var midpointOnce = false;
            var thirdQuartileOnce = false;





            var callAndroid = function() {
                AndroidFunction.openAndroidDialog();
            }

            myPlayer.addEvent("ended", callAndroid);
        });

    }
    </script>
4

1 回答 1

0

我有同样的问题

Videojs TypeError:this.addEvent 不是函数

尝试:myPlayer.on("结束", callAndroid);

于 2013-05-20T12:58:26.980 回答