AFAIK 无法自动执行此操作,您必须使用应用内浏览器 js 代码在每个平台上一致地打开外部链接。
您的问题没有给出服务器返回内容的明确示例,因此我假设您正在获取完整的 html 块并且只是在屏幕上呈现它。假设一个请求返回一些基本的东西:
<div id="my-links">
<a href='http://externallink.com'> External Link 1 </a>
<a href='http://externallink.com'> External Link 2 </a>
<a href='http://externallink.com'> External Link 3 </a>
</div>
您的请求如下所示:
$http.get('givemelinks').success(function(htmlData){
$scope.myContent = htmlData;
})
如果您可以访问服务器端并且可以进行更改:
在您的请求中添加一个“inappbrowser”参数,以检测它是否应该返回与 inappbrowser 兼容的链接,并将来自您的服务器的响应更改为:
if (inappbrowser) {
<div id="my-links">
<div ng-click='openExternal($event)' data-external='http://externallink.com'> External Link 1 </div>
<div ng-click='openExternal($event)' data-external='http://externallink.com'> External Link 2 </div>
<div ng-click='openExternal($event)' data-external='http://externallink.com'> External Link 3 </div>
</div>
} else {
<div id="my-links">
<a href='http://externallink.com'> External Link 1 </a>
<a href='http://externallink.com'> External Link 2 </a>
<a href='http://externallink.com'> External Link 3 </a>
</div>
}
并且有一个通用的 openExternal 方法:
$scope.openExternal = function($event){
if ($event.currentTarget && $event.currentTarget.attributes['data-external'])
window.open($event.currentTarget.attributes['data-external'], '_blank', 'location=yes');
}
如果无法更改服务器端
解析响应并用 ng-clicks 替换链接:
$http.get('givemelinks').success(function(htmlData){
htmlData = htmlData.replace(/href='(.*)'/,'ng-click="openExternal($event)" data-external="$1"').replace(/<a/,"<div").replace(/a>/,"div>")
$scope.myContent = htmlData;
})
并使用与上面相同的 openExternal 方法。
我正在用 div 替换锚点,以防止更改应用程序路线。这可能不是每个应用都需要的。
为了使它更好,你应该将它捆绑在一个open-external 指令中,这样你就可以在多个控制器中使用它并保持它们更干净。