精华内容
下载资源
问答
  • 人机交互——交互技术

    千次阅读 2021-04-18 23:26:45
    交互技术 1) 列出你所熟悉的软件系统(如Microsoft Office)中涉及到的交互技术? Microsoft Office中的许多系列软件都用到了交互技术,比如Word中就用到了定位、定值、选择、拖动、语音识别技术等。 2) 简述Photo...

    交互技术

    1) 列出你所熟悉的软件系统(如Microsoft Office)中涉及到的交互技术?
    Microsoft Office中的许多系列软件都用到了交互技术,比如Word中就用到了定位、定值、选择、拖动、语音识别技术等。
    2) 简述Photoshop或者AutoCAD中的二维图形交互技术。
    Photoshop或者AutoCAD中的二维图形交互技术:几何约束、引力场、拖动、橡皮筋技术、操作柄技术。
    3) 简述某一个三维交互软件如Maya或3ds max中的三维图形交互技术。
    Maya或 3ds max中的三维图形交互技术:直接操作(Direct Manipulation)、三维 Widgets、三视图输入。
    4) windows辅助功能选项的人性化设计
    为帮助人们根据自身特点更好地使用计算机设备,windows操作系统提供了快速配置和使用计算机的辅助特性的人性化设计。
    本次实验中,你使用的操作系统版本是: win10

    注意:win7系统中的“系统辅助功能选项”在win10中就是“轻松使用设置中心”。
    ①登陆进入windows操作系统。
    ②在开始菜单中单击控制面板,继续双击“辅助功能选项”图标,请记录,在“辅助功能选项”对话框中,有哪些选项卡可供设置选择?写出这些选项及其功能。

    讲述人:朗读屏幕上的任何文本
    音频描述:聆听对视频内容的描述
    放大镜:在屏幕的任何位置放大,是那个区域的所有内容变大。可以随时移动放大镜,将其锁定在一个位置或者调整大小
    高对比度: 通过加大窗口、 工具栏按钮和字体并以黑白显示它们, 以更改屏幕上显示项目的外观。
    屏幕键盘:使用鼠标或者其他指针设备(如游戏杆),从键盘图中选取一个键输入
    语音识别:对着麦克风讲话以便控制计算机、打开程序和听写文本
    鼠标指针:更改鼠标指针的颜色和大小
    键盘:粘滞键: 是专为同时按下两个或多个键有困难的人而设计的。
    筛选键: 可以使 Windows忽略短暂或重复的击键,也可以调整点击
    键盘的重复率。利用该项功能,用户可以将计算机设置成适
    合自己习惯的击键速度。
    切换键: 让系统在你按下切换键时,发出声音,以提醒你确认是否误
    按了切换键。
    ③请操作:
    为使行动不便的人通过鼠标等设备输入数据,应该如何设置?
    选择“开始“——“Windows轻松使用” ——“屏幕键盘”, 这样显示屏上会出现一个键盘, 用户可以通过鼠标点击这个键盘实现数据输入。

    为便于视力不好的用户读取计算机屏幕上的字符信息和图形,应该如何设置?
    选择“开始“——“Windows轻松使用” ——“放大镜”,这样鼠标所指的地方会在屏幕的上方显示出放大的效果, 还可以设置” 放大镜“的放大倍数。

    如果需要为视力障碍用户提供文字到语言的转换工具,使得能够朗读屏幕所显示的内容等,应该如何设置?
    选择“开始“——“Windows轻松使用” ——“讲述人”,这样电脑会自动朗读屏幕所显示的内容

    展开全文
  • Android:你要的WebView与 JS 交互方式 都在这里了

    万次阅读 多人点赞 2017-03-22 09:19:45
    上述功能是由Android的WebView实现的,其中涉及到Android客户端与Web网页交互的实现 今天我将全面介绍Android通过WebView与JS交互的全面方式 阅读本文前请先阅读:Android开发:最全面、最易懂的Webview详解 ...

    前言

    • 现在很多App里都内置了Web网页(Hybrid App),比如说很多电商平台,淘宝、京东、聚划算等等,如下图

    京东首页

    • 上述功能是由Android的WebView实现的,其中涉及到Android客户端与Web网页交互的实现
    • 今天我将全面介绍Android通过WebView与JS交互的全面方式

    阅读本文前请先阅读:Android开发:最全面、最易懂的Webview详解


    #目录

    目录


    1. 交互方式总结

    Android与JS通过WebView互相调用方法,实际上是:

    • Android去调用JS的代码
    • JS去调用Android的代码

    二者沟通的桥梁是WebView

    对于Android调用JS代码的方法有2种:

    1. 通过WebViewloadUrl()
    2. 通过WebViewevaluateJavascript()

    对于JS调用Android代码的方法有3种:

    1. 通过WebViewaddJavascriptInterface()进行对象映射
    2. 通过 WebViewClientshouldOverrideUrlLoading ()方法回调拦截 url
    3. 通过 WebChromeClientonJsAlert()onJsConfirm()onJsPrompt()方法回调拦截JS对话框alert()confirm()prompt() 消息

    2. 具体分析

    2.1 Android通过WebView调用 JS 代码

    对于Android调用JS代码的方法有2种:

    1. 通过WebViewloadUrl()
    2. 通过WebViewevaluateJavascript()

    方式1:通过WebViewloadUrl()

    • 实例介绍:点击Android按钮,即调用WebView JS(文本名为javascript)中callJS()
    • 具体使用:

    步骤1:将需要调用的JS代码以.html格式放到src/main/assets文件夹里

    1. 为了方便展示,本文是采用Andorid调用本地JS代码说明;
    2. 实际情况时,Android更多的是调用远程JS代码,即将加载的JS代码路径改成url即可

    需要加载JS代码:javascript.html

    // 文本名:javascript
    <!DOCTYPE html>
    <html>
    
       <head>
          <meta charset="utf-8">
          <title>Carson_Ho</title>
          
    // JS代码
         <script>
    // Android需要调用的方法
       function callJS(){
          alert("Android调用了JS的callJS方法");
       }
    </script>
    
       </head>
    
    </html>
    

    步骤2:在Android里通过WebView设置调用JS代码

    Android代码:MainActivity.java

    注释已经非常清楚

     public class MainActivity extends AppCompatActivity {
    
        WebView mWebView;
        Button button;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            mWebView =(WebView) findViewById(R.id.webview);
    
            WebSettings webSettings = mWebView.getSettings();
    
            // 设置与Js交互的权限
            webSettings.setJavaScriptEnabled(true);
            // 设置允许JS弹窗
            webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
    
            // 先载入JS代码
            // 格式规定为:file:///android_asset/文件名.html
            mWebView.loadUrl("file:///android_asset/javascript.html");
    
            button = (Button) findViewById(R.id.button);
    
    
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // 通过Handler发送消息
                    mWebView.post(new Runnable() {
                        @Override
                        public void run() {
    
                            // 注意调用的JS方法名要对应上
                            // 调用javascript的callJS()方法
                            mWebView.loadUrl("javascript:callJS()");
                        }
                    });
                    
                }
            });
    
            // 由于设置了弹窗检验调用结果,所以需要支持js对话框
            // webview只是载体,内容的渲染需要使用webviewChromClient类去实现
            // 通过设置WebChromeClient对象处理JavaScript的对话框
            //设置响应js 的Alert()函数
            mWebView.setWebChromeClient(new WebChromeClient() {
                @Override
                public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {
                    AlertDialog.Builder b = new AlertDialog.Builder(MainActivity.this);
                    b.setTitle("Alert");
                    b.setMessage(message);
                    b.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            result.confirm();
                        }
                    });
                    b.setCancelable(false);
                    b.create().show();
                    return true;
                }
    
            });
    
    
        }
    }
    

    效果图

    特别注意:JS代码调用一定要在 onPageFinished() 回调之后才能调用,否则不会调用。

    onPageFinished()属于WebViewClient类的方法,主要在页面加载结束时调用

    方式2:通过WebViewevaluateJavascript()

    • 优点:该方法比第一种方法效率更高、使用更简洁。
    1. 因为该方法的执行不会使页面刷新,而第一种方法(loadUrl )的执行则会。
    2. Android 4.4 后才可使用
    • 具体使用
    // 只需要将第一种方法的loadUrl()换成下面该方法即可
        mWebView.evaluateJavascript("javascript:callJS()", new ValueCallback<String>() {
            @Override
            public void onReceiveValue(String value) {
                //此处为 js 返回的结果
            }
        });
    }
    

    2.1.2 方法对比

    方式对比图

    2.1.3 使用建议

    两种方法混合使用,即Android 4.4以下使用方法1,Android 4.4以上方法2

    // Android版本变量
    final int version = Build.VERSION.SDK_INT;
    // 因为该方法在 Android 4.4 版本才可使用,所以使用时需进行版本判断
    if (version < 18) {
        mWebView.loadUrl("javascript:callJS()");
    } else {
        mWebView.evaluateJavascript("javascript:callJS()", new ValueCallback<String>() {
            @Override
            public void onReceiveValue(String value) {
                //此处为 js 返回的结果
            }
        });
    }
    

    2.2 JS通过WebView调用 Android 代码

    对于JS调用Android代码的方法有3种:

    1. 通过WebViewaddJavascriptInterface()进行对象映射
    2. 通过 WebViewClientshouldOverrideUrlLoading ()方法回调拦截 url
    3. 通过 WebChromeClientonJsAlert()onJsConfirm()onJsPrompt()方法回调拦截JS对话框alert()confirm()prompt() 消息

    2.2.1 方法分析

    方式1:通过 WebViewaddJavascriptInterface()进行对象映射

    步骤1:定义一个与JS对象映射关系的Android类:AndroidtoJs

    AndroidtoJs.java(注释已经非常清楚)

    // 继承自Object类
    public class AndroidtoJs extends Object {
    
        // 定义JS需要调用的方法
        // 被JS调用的方法必须加入@JavascriptInterface注解
        @JavascriptInterface
        public void hello(String msg) {
            System.out.println("JS调用了Android的hello方法");
        }
    }
    

    步骤2:将需要调用的JS代码以.html格式放到src/main/assets文件夹里

    需要加载JS代码:javascript.html

    <!DOCTYPE html>
    <html>
       <head>
          <meta charset="utf-8">
          <title>Carson</title>  
          <script>
             
            
             function callAndroid(){
            // 由于对象映射,所以调用test对象等于调用Android映射的对象
                test.hello("js调用了android中的hello方法");
             }
          </script>
       </head>
       <body>
          //点击按钮则调用callAndroid函数
          <button type="button" id="button1" "callAndroid()"></button>
       </body>
    </html>
    

    步骤3:在Android里通过WebView设置Android类与JS代码的映射

    详细请看注释

    public class MainActivity extends AppCompatActivity {
    
        WebView mWebView;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            mWebView = (WebView) findViewById(R.id.webview);
            WebSettings webSettings = mWebView.getSettings();
    
            // 设置与Js交互的权限
            webSettings.setJavaScriptEnabled(true);
    
            // 通过addJavascriptInterface()将Java对象映射到JS对象
            //参数1:Javascript对象名
            //参数2:Java对象名
            mWebView.addJavascriptInterface(new AndroidtoJs(), "test");//AndroidtoJS类对象映射到js的test对象
    
            // 加载JS代码
            // 格式规定为:file:///android_asset/文件名.html
            mWebView.loadUrl("file:///android_asset/javascript.html");
    
    

    效果图

    特点

    • 优点:使用简单

    仅将Android对象和JS对象映射即可

    方式2:通过 WebViewClient 的方法shouldOverrideUrlLoading ()回调拦截 url

    • 具体原理:
    1. Android通过 WebViewClient 的回调方法shouldOverrideUrlLoading ()拦截 url
    2. 解析该 url 的协议
    3. 如果检测到是预先约定好的协议,就调用相应方法

    即JS需要调用Android的方法

    • 具体使用:
      步骤1:在JS约定所需要的Url协议
      JS代码:javascript.html

    以.html格式放到src/main/assets文件夹里

    <!DOCTYPE html>
    <html>
    
       <head>
          <meta charset="utf-8">
          <title>Carson_Ho</title>
          
         <script>
             function callAndroid(){
                /*约定的url协议为:js://webview?arg1=111&arg2=222*/
                document.location = "js://webview?arg1=111&arg2=222";
             }
          </script>
    </head>
    
    <!-- 点击按钮则调用callAndroid()方法  -->
       <body>
         <button type="button" id="button1" "callAndroid()">点击调用Android代码</button>
       </body>
    </html>
    

    当该JS通过Android的mWebView.loadUrl("file:///android_asset/javascript.html")加载后,就会回调shouldOverrideUrlLoading (),接下来继续看步骤2:

    步骤2:在Android通过WebViewClient复写shouldOverrideUrlLoading ()

    MainActivity.java

    public class MainActivity extends AppCompatActivity {
    
        WebView mWebView;
    //    Button button;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            mWebView = (WebView) findViewById(R.id.webview);
    
            WebSettings webSettings = mWebView.getSettings();
    
            // 设置与Js交互的权限
            webSettings.setJavaScriptEnabled(true);
            // 设置允许JS弹窗
            webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
    
            // 步骤1:加载JS代码
            // 格式规定为:file:///android_asset/文件名.html
            mWebView.loadUrl("file:///android_asset/javascript.html");
    
    
    // 复写WebViewClient类的shouldOverrideUrlLoading方法
    mWebView.setWebViewClient(new WebViewClient() {
                                          @Override
                                          public boolean shouldOverrideUrlLoading(WebView view, String url) {
    
                                              // 步骤2:根据协议的参数,判断是否是所需要的url
                                              // 一般根据scheme(协议格式) & authority(协议名)判断(前两个参数)
                                              //假定传入进来的 url = "js://webview?arg1=111&arg2=222"(同时也是约定好的需要拦截的)
    
                                              Uri uri = Uri.parse(url);                                 
                                              // 如果url的协议 = 预先约定的 js 协议
                                              // 就解析往下解析参数
                                              if ( uri.getScheme().equals("js")) {
    
                                                  // 如果 authority  = 预先约定协议里的 webview,即代表都符合约定的协议
                                                  // 所以拦截url,下面JS开始调用Android需要的方法
                                                  if (uri.getAuthority().equals("webview")) {
    
                                                     //  步骤3:
                                                      // 执行JS所需要调用的逻辑
                                                      System.out.println("js调用了Android的方法");
                                                      // 可以在协议上带有参数并传递到Android上
                                                      HashMap<String, String> params = new HashMap<>();
                                                      Set<String> collection = uri.getQueryParameterNames();
    
                                                  }
    
                                                  return true;
                                              }
                                              return super.shouldOverrideUrlLoading(view, url);
                                          }
                                      }
            );
       }
            }
    
    

    效果图

    特点

    • 优点:不存在方式1的漏洞;
    • 缺点:JS获取Android方法的返回值复杂。

    如果JS想要得到Android方法的返回值,只能通过 WebView 的 loadUrl ()去执行 JS 方法把返回值传递回去,相关的代码如下:

    // Android:MainActivity.java
    mWebView.loadUrl("javascript:returnResult(" + result + ")");
    
    // JS:javascript.html
    function returnResult(result){
        alert("result is" + result);
    }
    

    #方式3:通过 WebChromeClientonJsAlert()onJsConfirm()onJsPrompt()方法回调拦截JS对话框alert()confirm()prompt() 消息

    在JS中,有三个常用的对话框方法:

    Paste_Image.png

    方式3的原理:Android通过 WebChromeClientonJsAlert()onJsConfirm()onJsPrompt()方法回调分别拦截JS对话框
    (即上述三个方法),得到他们的消息内容,然后解析即可。

    下面的例子将用**拦截 JS的输入框(即prompt()方法)**说明 :

    1. 常用的拦截是:拦截 JS的输入框(即prompt()方法)
    2. 因为只有prompt()可以返回任意类型的值,操作最全面方便、更加灵活;而alert()对话框没有返回值;confirm()对话框只能返回两种状态(确定 / 取消)两个值

    步骤1:加载JS代码,如下:
    javascript.html

    以.html格式放到src/main/assets文件夹里

    <!DOCTYPE html>
    <html>
       <head>
          <meta charset="utf-8">
          <title>Carson_Ho</title>
          
         <script>
            
    	function clickprompt(){
        // 调用prompt()
        var result=prompt("js://demo?arg1=111&arg2=222");
        alert("demo " + result);
    }
    
          </script>
    </head>
    
    <!-- 点击按钮则调用clickprompt()  -->
       <body>
         <button type="button" id="button1" "clickprompt()">点击调用Android代码</button>
       </body>
    </html>
    

    当使用mWebView.loadUrl("file:///android_asset/javascript.html")加载了上述JS代码后,就会触发回调onJsPrompt(),具体如下:

    1. 如果是拦截警告框(即alert()),则触发回调onJsAlert()
    2. 如果是拦截确认框(即confirm()),则触发回调onJsConfirm()

    步骤2:在Android通过WebChromeClient复写onJsPrompt()

    public class MainActivity extends AppCompatActivity {
    
        WebView mWebView;
    //    Button button;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            mWebView = (WebView) findViewById(R.id.webview);
    
            WebSettings webSettings = mWebView.getSettings();
    
            // 设置与Js交互的权限
            webSettings.setJavaScriptEnabled(true);
            // 设置允许JS弹窗
            webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
    
    // 先加载JS代码
            // 格式规定为:file:///android_asset/文件名.html
            mWebView.loadUrl("file:///android_asset/javascript.html");
    
    
            mWebView.setWebChromeClient(new WebChromeClient() {
                                            // 拦截输入框(原理同方式2)
                                            // 参数message:代表promt()的内容(不是url)
                                            // 参数result:代表输入框的返回值
                                            @Override
                                            public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) {
                                                // 根据协议的参数,判断是否是所需要的url(原理同方式2)
                                                // 一般根据scheme(协议格式) & authority(协议名)判断(前两个参数)
                                                //假定传入进来的 url = "js://webview?arg1=111&arg2=222"(同时也是约定好的需要拦截的)
    
                                                Uri uri = Uri.parse(message);
                                                // 如果url的协议 = 预先约定的 js 协议
                                                // 就解析往下解析参数
                                                if ( uri.getScheme().equals("js")) {
    
                                                    // 如果 authority  = 预先约定协议里的 webview,即代表都符合约定的协议
                                                    // 所以拦截url,下面JS开始调用Android需要的方法
                                                    if (uri.getAuthority().equals("webview")) {
    
                                                        //
                                                        // 执行JS所需要调用的逻辑
                                                        System.out.println("js调用了Android的方法");
                                                        // 可以在协议上带有参数并传递到Android上
                                                        HashMap<String, String> params = new HashMap<>();
                                                        Set<String> collection = uri.getQueryParameterNames();
    
                                                        //参数result:代表消息框的返回值(输入值)
                                                        result.confirm("js调用了Android的方法成功啦");
                                                    }
                                                    return true;
                                                }
                                                return super.onJsPrompt(view, url, message, defaultValue, result);
                                            }
    
    // 通过alert()和confirm()拦截的原理相同,此处不作过多讲述
    
                                            // 拦截JS的警告框
                                            @Override
                                            public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
                                                return super.onJsAlert(view, url, message, result);
                                            }
    
                                            // 拦截JS的确认框
                                            @Override
                                            public boolean onJsConfirm(WebView view, String url, String message, JsResult result) {
                                                return super.onJsConfirm(view, url, message, result);
                                            }
                                        }
            );
    
    
                }
    
            }
    

    效果图

    2.2.2 三种方式的对比 & 使用场景

    示意图


    3. 总结

    • 本文主要对Android通过WebView与JS的交互方式进行了全面介绍

    示意图


    请帮顶和评论点赞!因为你们的赞同/鼓励是我写作的最大动力!


    欢迎关注carson_ho的微信公众号

    示意图

    示意图

    展开全文
  • 交互式视频h5 许多教育工作者希望为其课堂或在线课程创建交互内容。 如果您不是像我们大多数人一样HTML5程序员,但是您已经听说HTML5可以简化您的工作并为您的学生提供出色的标准Web体验,那么这就是入门方法。 ...

    交互式视频h5

    许多教育工作者希望为其课堂或在线课程创建交互式内容。 如果您不是像我们大多数人一样HTML5程序员,但是您已经听说HTML5可以简化您的工作并为您的学生提供出色的标准Web体验,那么这就是入门方法。

    H5P是免费的开源工具,可帮助您在所选的浏览器中创建HTML5内容并在所有操作系统和浏览器之间共享。 为了进一步解释该工具,我与Joubel.com的首席开发人员Svein-Tore Griff With进行了交谈 ,后者与他的团队一起创建了H5P。

    唐·沃特金斯(DW):您是如何进入开源的?

    Svein-Tore Griff With(STGW):在全职从事H5P工作之前,我们核心团队中的许多人都深深参与了开源项目。 多年来,我们一直在为基于Drupal的项目提供咨询,并且我们一直在尽力为Drupal社区做出贡献。 H5P已安装在7,000多个网站上。 它被包括常春藤盟校在内的数百所大学使用。 包括《财富》 50强公司在内的大型公司以及联合国部分地区等其他大型组织都在使用它。

    DW:H5P的推动力是什么?

    STGW:交互式内容的世界几乎是中世纪的。 由于没有通用的交互式内容格式,因此从全局的角度来看,创建过程变得非常分散和混乱。 一遍又一遍地手工制作简单的事情,例如多项选择测验,不仅适用于不同的平台,而且适用于不同的网站。 出色的交互式内容和工具的成本通常很高,因为它通常涉及制作另一个自定义版本。

    H5P格式是开放的,用于创建H5P内容的工具是开放源的。 这样可以保证广告素材拥有自己的内容,并且不会被特定工具的命运和许可制度所束缚。 在我们的博客中了解有关H5P如何确保内容仍然属于您的信息

    DW:H5P如何允许用户在内容管理系统中创建丰富的内容?

    STGW:H5P是现有CMS和学习管理系统(LMS)系统的插件。 只需插入H5P,您的系统就可以创建,共享和重用出色的交互式内容。 对于没有H5P插件可用的系统,可以使用iframe或学习工具互操作性(LTI)标准嵌入内容。 借助LTI和支持的API和规范,也可以嵌入外部托管的H5P创作工具。

    DW:H5P有什么功能,使其可以感知正在播放的设备; 即iOS,Android,LInux,Firefox,Chrome和Internet Explorer?

    STGW:通常H5P不会感知正在运行的设备,但是在某些情况下,例如它可以使全屏模式正常工作,但是它通常只是响应式设计。 H5P无法控制正在使用该页面的页头标签,因此我们将宽度与字体大小进行比较以识别布局更改的断点。 您可以在我们的博客上阅读有关此内容的更多信息

    DW:为什么您的代码同时获得GPL和MIT的许可?

    STGW:我们希望一切都成为MIT。 目前,H5P核心中有Drupal的一些代码可以净化HTML。 删除后,我们将仅使用MIT,因为GPL的限制更为严格。

    DW:我用H5P插件构建了一个Moodle服务器,并看到了它如何连接到Moodle的测验功能以允许收集学生答案的数据。 在Wordpress和/或Drupal中如何实现?

    STGW:我们主要依靠xAPI标准来存储和分析用户的答案。 此外,我们节省了所有平台上的时间和得分,并且与Drupal的测验模块进行了特殊集成,因此H5P可以作为测验问题。 我们正在利用xAPI来完成这项工作。

    DW:H5P代码中内置了哪些工具,可以用来存储与之交互收集的数据吗?

    STGW:H5P中有两种跟踪类型。 一种是用户跟踪。 在这里,我们使用xAPI。 由主机决定如何处理H5P生成的所有xAPI数据。 如果主机系统(例如Drupal)没有第三方模块来处理此数据,则根本不会存储该模块。 我们在H5P.org上将这些数据发送到Google Analytics(分析)。

    另一种是报告插件,每个月都会使用匿名数据将其发送到H5P.org。 它包括网站上H5P作者的数量,每种类型的H5P的数量等等 启用插件后,它们会提供有关H5P使用方式的非常有价值的反馈,并有助于指导H5P的未来发展。 您可以禁用每个站点的这些报告。

    DW:您是否鼓励开发人员参与其中?

    STGW:当然可以。 H5P的全部潜力只有在世界上大部分Web开发人员都拥护我们的情况下才能实现。 开发人员可以通过多种方式参与其中。 他们可以学习如何创建新的H5P内容类型在H5P.org上共享他们的工作 他们可以通过GitHub改进H5P内容类型,并参加论坛讨论

    H5P代码托管在GitHub上

    翻译自: https://opensource.com/article/16/11/creating-html5-content-h5p

    交互式视频h5

    展开全文
  • shell read 交互键入回车默认输入内容

    千次阅读 2018-12-05 15:48:10
    很好理解,键入内容为回车的时候,内容肯定为null,再次 加上if 判断,内容为空就给赋值为默认值。 在此需要掌握if相关逻辑表达式 if [ -z “$null” ] -z 字符串为null,即长度为0 -n 字符串不为null,即长度不为...

    很好理解,键入内容为回车的时候,内容肯定为null,再次 加上if 判断,内容为空就给赋值为默认值。


    在此需要掌握if相关逻辑表达式
    if [ -z “$null” ]
    -z $null为null,即为真
    -n $null不为null,即为真


    以下将以实际代码的形式展示

    #!/bin/bash
    #panda_jimmy
    #181204
    
    read -p "Pls input the url(http://cncwo.cdn.cibn.cc/m3u8/4a39dc7ab2dbe801ddc94a8bdedc3656.m3u8):" url
            if [ -z "$url" ];then
            url="http://cncwo.cdn.cibn.cc/m3u8/4a39dc7ab2dbe801ddc94a8bdedc3656.m3u8"
            fi
    read -p "Pls input the key(Hzx6iAj5lUfoEUwGHUl9s5YXSQCk1DOjpQX6XZ6tZq4jCNCWOO4FoLLTN0CI0ABn9RanSqsPHhmpEI0GEDIfFQzxnMNikKZcOYUZ):" key
            if [ -z "$key" ];then
            key="Hzx6iAj5lUfoEUwGHUl9s5YXSQCk1DOjpQX6XZ6tZq4jCNCWOO4FoLLTN0CI0ABn9RanSqsPHhmpEI0GEDIfFQzxnMNikKZcOYUZ"
            fi
    read -p "Pls input the ttl(86400):" ttl
            if [ -z "$ttl" ];then
            ttl="86400"
            fi
    read -p "Pls input the channel(cncwo):" channel
            if [ -z "$channel" ];then
            channel=cncwo
            fi
    t=`date +%s`
    
    ######echo "$key|$channel|$t|$ttl"
    
    k=`echo -n "$key|$channel|$t|$ttl" |md5sum |cut -d' ' -f1`
    echo -e k="\033[30m$k\033[0m"
    echo -e "\033[40;37m$url?k=$k&channel=$channel&t=$t&ttl=$ttl\033[0m"
    

    运行后的结果是这样:

    [root@localhost workspace]# ./token.sh
    Pls input the url(http://cncwo.cdn.cibn.cc/m3u8/4a39dc7ab2dbe801ddc94a8bdedc3656.m3u8):
    Pls input the key(Hzx6iAj5lUfoEUwGHUl9s5YXSQCk1DOjpQX6XZ6tZq4jCNCWOO4FoLLTN0CI0ABn9RanSqsPHhmpEI0GEDIfFQzxnMNikKZcOYUZ):
    Pls input the ttl(86400):
    Pls input the channel(cncwo):
    k=fd839ae262525b1ce39fc24a3ae76c7e
    http://cncwo.cdn.cibn.cc/m3u8/4a39dc7ab2dbe801ddc94a8bdedc3656.m3u8?k=fd839ae262525b1ce39fc24a3ae76c7e&channel=cncwo&t=1543995980&ttl=86400
    

    这下应该很清楚了吧,赶快行动起来操作吧-z-

    引用文献:https://blog.csdn.net/u010339879/article/details/77938911

    展开全文
  • 硬件交互之命令交互

    千次阅读 2016-05-14 02:14:37
    java层 使用字节流 与硬件嵌入式交互
  • Ajax同步交互与异步交互

    千次阅读 2020-08-27 21:58:32
    Ajax同步交互与异步交互 同步交互是什么 所谓同步交互,就是指发送一个请求,需要等待返回,然后才能够发送下一个请求。同步交互相当于排队,轮到下一个的情况会因为前一个而有所不同。 说明:同步交互就是第二次...
  • 同步交互异步交互

    千次阅读 2011-09-26 20:42:38
    AJAX(Asynchronous Javascript and XML)---异步交互(通信) ...1、 涉及的技术内容 1) 使用XHTML和CSS标准的显示技术; 2) 使用DOM进行动态显示和交互; 3) XML和XSLT进行数据交换和处理; 4) XMLHttpR
  • Chapter1 揭开交互神秘面纱 第一章 揭开交互神秘面纱 产品设计开发流程和团队构成 产品设计开发六大步 交互设计师和产品经理的区别 交互设计影响用户体验 优秀的交互设计来源于生活!!! 用户体验:国际...
  • Ueditor 前后端数据交互

    万次阅读 2016-04-06 23:36:22
    一、富文本内容交互 1、编辑器内容初始化(即往编辑器中设置富文本) 场景一:写新文章,编辑器中预置提示、问候等内容。 在editor_config.js文件中找到initialContent参数,设置其值为需要的提示或者...
  • 这里,我们要使用选项卡和内容面板来做一个配合,来实现内容切换。 操作还是同样简单、快速、不累。 不需要我啰嗦,直接看视频:
  • 简介:随着 5G、云计算、人工智能的高速发展,视频泛在化景象顺势而来,人与人、人与物、人与社会之间的内容表达形态、信息交互方式在迅速更迭。随着 5G、云计算、人工智能的高速发展,视频泛在化景象顺势而来,人与...
  • 前言之前有不少人为我关于JS与iOS进行交互的问题,也就是,我们怎么才能从通过获取JS的内容显示到指定的控制器中,今天我给大家写了一个Demo,在这里交互我们用到了WKWebView而不是UIwebview,至于问什么会使用它其实在前...
  • 交互设计

    千次阅读 2014-12-13 20:19:54
    本词条缺少信息栏,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 交互设计,又称互动设计,(英文Interaction Design, 缩写 IxD 或者 IaD),是定义、设计人造系统的行为的设计领域。人造物,即...
  • 一:本文解决的问题:  1.不等webView加载完毕,就能获取原生的内容,  2.举个例子: ...二:本文默认您已经了解JS交互的一些内容了,若您不明白,请看这篇文章,里面介绍了JS交互的详细内容,demo地址等
  • Chapter5 交互设计测试与评估 第一章 为什么要开展测试与评估 用户测试:请目标用户使用产品来完成任务,观察并记录用户使用产品的整个过程. 用户测试的定义:也被称为产品可用性测试,指特定的用户在特定的使用...
  • Ajax 异步交互

    千次阅读 2020-09-07 08:21:13
    异步交互的区别在于同步交互需要等待结果,而异步交互不需要等待。 所谓异步交互,就是指发送一个请求,不需要等待返回,随时可以再发送下一个请求。 同步交互与异步交互区别在于:同步需要等待结果,而异步不需要...
  • VTK交互系统 2 交互器样式

    千次阅读 2019-11-22 22:41:06
    所谓交互器样式,就是你设置了交互器,然后它里面会有各种默认的或者你自己定义的交互方式,比如你可以设置滚轮来将图片放大或者缩小。或者你可以设置鼠标点击移动来改变摄像机的视角,从而看到物体的不同面。 VTK...
  • UML交互

    千次阅读 2015-06-09 10:56:48
    交互图描述的是一组对象之间的交互过程,或者说,这里我们实际上要回答这样一个问题:“方法调用过程在UML中怎样表示?” UML交互图 本文将通过一个非常简单的交易系统来说明UML交互图。这个系统包含六个Java类...
  • webview的JS交互

    千次阅读 2015-06-15 15:36:06
    1、在android项目中,用webview加载html是经常出现的,如果html的内容无法响应application的话,那将会出现很多局限性,所以就有了webview与JS的交互,首先,是activity里面的webview与JS交互。在activity中为...
  • 再看语音交互设计

    千次阅读 2019-08-20 22:02:00
    声音一直是人与人沟通的核心,而今也成为了人机交互的核心——智能语音交互。早在2016年,google声称其搜素请求中有20%是通过语音完成的。但是,语音交互设计并不是新兴的技术,在20多年前老码农刚刚参加工作的时候...
  • Shell 交互输入

    千次阅读 2017-08-15 22:11:57
    场景描述如果脚本中使用ssh 登录服务器,如何用shell实现自动输入密码... 其实有三种办法:1.重定向2.... expect主要适用于交互脚本中,详细参见1,内容比较多,这里只写如何解决自动用ssh登录服务器 和shell一样, 需要安装
  • 网页交互性设计

    千次阅读 2018-02-27 18:20:17
    交互性设计对于任何一个Web应用,与用户互动是最基本的要求。为Web应用增加交互性,最常用的方法,莫过于使用 Javascript 或 jQuery、AJAX 了。本节不打算详细介绍这几种技术,只是简要介绍在网页版 word 中,如何...
  • 前后端交互,API数据交互

    千次阅读 2018-08-29 20:59:01
    例如:一个博客网站,你需要提供一个美丽,友好,使用的界面给用户写博客,管理博客(删改),还有展示博客内容,这些页面不仅仅是一个输入框就可以的(单纯输入框多丑啊,在这个看颜值的社会,是不存在的),然后...
  • 人机智能交互技术(ROS-HRI-人与机器人的智能交互)课程介绍与资料这是机器人系统设计与控制技术的后续课程,全部的课程内容包括四门课程(本科),如下:人机智能交互技术是人机融合的基础,课程介绍多种人机交互...
  • 使用交互环境

    千次阅读 2012-07-27 13:41:07
    使用交互环境     许多脚本语言的解释器都提供了交互环境,我们可通过此环境与计算机沟通交流。为什么叫做 交互环境?因为我们在这里通过编程语言与计算机沟通,让它做任何事情,它都会立刻照办并 给予我们...
  • 人机交互-语音交互的优势和劣势

    千次阅读 2020-10-24 22:33:55
    对比声控式交互、触控交互和视觉交互方式的优缺点如下表: 声控式交互 触控交互 视觉交互 优势 性能优异; 准确度高; 输入更高效; 感官和精力...
  • 人机交互

    千次阅读 2015-09-22 16:25:37
    1、什么是人机交互 人机交互是关于设计、评价和实现供人们使用的...人机交互的研究内容十分广泛、涵盖了建模、设计、评估等理论和方法以及在Web、移动计算、虚拟现实等方面的应用研究与开发,主要包括:1、人机交互
  • AR交互设计

    千次阅读 2018-06-13 11:13:24
        研究生期间做基于MR的远程协同设计和指导技术研究,阅读和学习相关资料,学习总结了AR交互设计相关内容。     AR类产品的出现,可能是第一次实现虚拟世界与现实世相互“融合”,完成屏幕的“跨越”,人...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 977,769
精华内容 391,107
关键字:

内容交互