cordova - angularjs - <a> inside html, how to preventDefault if ng-bind-html</a>

时间:2014-02-11 09:02:12

标签: javascript android angularjs cordova

我有一个Cordova应用程序,即从json api获取html文本。问题是在文本中我有链接,如果你按下它们就会在cordova webview中打开它们 来自json调用的示例文本:

{newstext: "<div>
       Some text
       <div>
         Some text 2
         <a href="www.google.com">Go link</a>
      </div>
     </div>"
}

我需要以某种方式解析它或拦截它。我尝试了e.preventDefaults,甚至试图添加一个自定义类,但是如果它在angularjs模板上没有找到链接:

<div ng-bind-html="htmlText"></div>

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

不确定为什么要这样做,但这应该可以解决问题。

<a href="SOME_URL" ng-click="$event.preventDefault()">

您可以从href标记中删除<a>属性。请参阅ngHref docs示例。

答案 1 :(得分:0)

如果您需要屏蔽此链接,可以使用cordova / phonegap domain whitelist

如果您需要过滤服务器响应,可以使用拦截器来执行此操作。

app.config(function($provide, $httpProvider){
    $provide.factory('FilterInterceptor', function($q, $injector, $window, $rootScope){
    return {

        request: function(config){
            return config || $q.when(config);
        },

        requestError: function(rejecton){
            return $q.reject(rejecton);
        },

        response: function(response){
            //Check if your calling an external URL
            if(new RegExp("externalresource").test(response.config.url)) {
                console.log(response.data);
                //Do a substitution on the href with navigator.load(url, openexternal:true) 
            }

            return response  || $q.when(response);
        },

        responseError: function(rejecton){
            return $q.reject(rejecton);
        }
    }});
    $httpProvider.interceptors.push('FilterInterceptor');
});

请确保仅对外部资源上的调用替换href属性。