开发者社区> 问答> 正文

bb.biz.util.open 报错

你好,我在使用 bb.biz.util.open 这个 API 时,无法成功,会出现失败信息:


http://x.x.x.x
errorMessage: Jsapi Should NOT Call,
selector String = open:to:
errorCode: 7


我的环境是,手机系统版本:iOS 9.3.1 (13E238) ,钉钉版本:2.9.0 (1443886) 。

我找过相关信息:bbs.aliyun.com/read/265723.html ,这里最后好像确认是钉钉的 BUG 。

我现在在已知消息中,确认我的代码是没有问题,如下:


<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>钉钉登录</title>
<script type="text/javascript" src="//g.alicdn.com/ilw/ding/0.8.6/scripts/dingtalk.js"></script>
<script type="text/javascript" src="//s.zys.me/js/jq/jquery.min.js"></script>
</head>
<body>
  <script type="text/javascript">

    $(function(){
      var infoDefer = $.Deferred();

      $.ajax({
        url: '/dingding/jsapi-sign',
        data: {url: location.href},
        dataType: 'json',
        success: function(response){
          var info = response.data;
          infoDefer.resolve(info);
        }
      });

      // 这个事件处理得有问题, 延迟绑定就无效了
      dd.ready(function(){

        infoDefer.done(function(info){
          dd.config({
            agentId: info.agent_id, // 必填,微应用ID
            corpId: info.corp_id,//必填,企业ID
            timeStamp: info.timestamp, // 必填,生成签名的时间戳
            nonceStr: info.nonce, // 必填,生成签名的随机串
            signature: info.sign, // 必填,签名
            jsApiList: [
                      'runtime.permission.requestAuthCode'
                    , 'device.notification.showPreloader'
                    , 'device.notification.hidePreloader'
                    , 'device.notification.actionSheet'
                    , 'device.notification.vibrate'
                    , 'dd.biz.navigation.setTitle'
                    , 'biz.navigation.setMenu'
                    , 'biz.navigation.setRight'
                    , 'biz.util.open'
            ] // 必填,需要使用的jsapi列表
          });

          dd.device.notification.showPreloader({
              text: "api调用是没有问题的",
              showIcon: true
          });

          dd.biz.util.open({
              name: 'profile', //页面名称,我试其它的,比如像 friendAdd 也是一样的错
              params: {
                  id: 'manager6789',    // 这个信息从后台确认,并写死用于调试
                  corpId: info.corp_id
              },
              onSuccess : function() {},
              onFail : function(err) {
                  var l = $.map(err, function (v, k) { return k + ': ' + v });
                  alert(l.join('\n'));
              }
          });

        });
      });

    });

  </script>
</body>
</html>


如果有什么更多的我能做,有助于定位的问题的,也在回复中让我知道。

谢谢。



展开
收起
zephyr 2016-04-28 11:01:03 6801 0
5 条回答
写回答
取消 提交回答
  • Rebb.biz.util.open 报错
    可以打断点,看看更多的报错信息吗
    2016-05-03 22:23:44
    赞同 展开评论 打赏
  • 回 6楼zephyr的帖子
    添加 dd.error() 看是否有什么错误信息
    2016-05-03 21:04:41
    赞同 展开评论 打赏
  • 回 2楼(zephyr) 的帖子
    dd.ready后面添加dd.error,看下什么报错。
    正常调用流程是:先进行dd.config,然后dd.ready,在ready里面进行bb.biz.util.open调用

    -------------------------

    正常调用流程是:先进行dd.config,然后dd.ready,在ready里面进行bb.biz.util.open调用

    重申下。

    再形象些:
    dd.config{...}
    dd.ready{...}
    dd.error{...}

    2016-04-29 09:50:00
    赞同 展开评论 打赏
  • 前端,Python,BI,OLAP
    回 1楼蛋蛋oo蛋蛋的帖子
    好的,谢谢哈。

    -------------------------

    回 3楼忠恕的帖子
    请问你看我的原贴了吗?我原贴中有出错信息,有完整的代码。

    调用时的出错信息是:

    http:/x.x.x.x
    errorMessage: Jsapi Should NOT Call,
    selector String = open:to:
    errorCode: 7

    -------------------------

    回 5楼忠恕的帖子
    请问你能直接给一个能正确执行的正向例子来确认问题吗?(是本身在任何条件下都无法正确调用,还是在某种条件下可以调用成功?)


    ------------------------


    我按你说的顺序调整代码,碰到了新的问题。


    dd.config 之后, dd.ready 的回调就不会被触发了。iOS 和 Android 环境都一样。如下:

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8" />
    <title>钉钉登录</title>
    <script type="text/javascript" src="http://g.alicdn.com/ilw/ding/0.8.6/scripts/dingtalk.js"></script>
    <script type="text/javascript" src="http://s.zys.me/js/jq/jquery.min.js"></script>
    </head>
    <body>
      <script type="text/javascript">

        $(function(){
          $.ajax({
            url: '/dingding/jsapi-sign',
            data: {url: location.href},
            dataType: 'json',
            success: function(response){
              var info = response.data;

              ;(function(){
                //return;
                dd.config({
                  agentId: info.agent_id,
                  corpId: info.corp_id,
                  timeStamp: info.timestamp,
                  nonceStr: info.nonce,
                  signature: info.sign,
                  jsApiList: [ 'biz.util.open' ]
                });
              })();

              dd.ready(function(){
                alert('ok');
              });
              alert('here');

            }
          });
        });

      </script>
    </body>
    </html>


    -------------------------

    Re回 7楼nuliang的帖子
    dd.error() 没有内容。

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8" />
    <title>钉钉登录</title>
    <script type="text/javascript" src="http://g.alicdn.com/ilw/ding/0.8.6/scripts/dingtalk.js"></script>
    <script type="text/javascript" src="http://s.zys.me/js/jq/jquery.min.js"></script>
    <script type="text/javascript" src="http://192.168.0.102:8081/target/target-script-min.js#anonymous"></script>
    </head>
    <body>
      <script type="text/javascript">

        $(function(){
          $.ajax({
            url: '/dingding/jsapi-sign',
            data: {url: location.href},
            dataType: 'json',
            success: function(response){
              var info = response.data;

              ;(function(){
                //return;
                dd.config({
                  agentId: info.agent_id,
                  corpId: info.corp_id,
                  timeStamp: info.timestamp,
                  nonceStr: info.nonce,
                  signature: info.sign,
                  jsApiList: [ 'biz.util.open' ]
                });
              })();

              dd.ready(function(){
                alert('ok');
              });
              alert('here');
              dd.error();
            }
          });
        });


      </script>
    </body>
    </html>

    -------------------------

    Re回 8楼肥龙的帖子
    代码就那么几行,也没有额外的报错信息。

    1. 按我原来的代码, bb.biz.util.open() 调用时会报错,报错的信息我已经给出了。

    2. 按后面的朋友提供的建议:

    再形象些: dd.config{...} dd.ready{...} dd.error{...}


    现象是 dd.ready() 这个回调不会触发。

    -------------------------

    Rebb.biz.util.open 报错
    官方的技术支持大哥大姐们,  bb.biz.util.open()   这个 api ,烦请提供一段在你们自己的环境中可正确执行的代码片段,这不难吧?


    从发贴到现在都要一个星期了 ……

    -------------------------

    Rebb.biz.util.open 报错
    今天从头梳理流程,把这个问题解决了。问题是我 jsapi 的签名处理错误。

    • 有部分的 jsapi 应该是不验证签名的,所以之前虽然我的签名是不对的,但是因为这些 api 使用没问题,所以我一直以为我的签名没有问题。
    • 签名错的地方是对文档上写的“使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串”理解有误,之前我把 value 部分作 urlencode 了。
    • 如果签名错了,嗯,也是得不到任何反馈的,表现的现象只是在作完 dd.config 之后, dd.ready 不会触发。(这点见我上面的帖子,因为签名错误的问题,不作 dd.config 的情况下, dd.ready 可以正常触发,所以我一直这样用下来的)

    2016-04-28 22:32:04
    赞同 展开评论 打赏
  • 丫丫丫丫丫丫丫丫丫
    Rebb.biz.util.open 报错
    你好,这和问题我已经反馈给对应的开发。有人会跟进这个问题。
    2016-04-28 22:00:34
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Paddling Up the Stream: Lesson 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载