Angular Marked和Inappbrowser在系统浏览器中打开所有链接

wig

我正在开发一个Ionic应用程序,用户可以在其中发布降价内容。为了使这项工作,我正在使用带角度标记的库。在应用程序中,我希望在操作系统的默认浏览器中打开所有markdown链接,因此我做了两件事。

  1. 我编写了一个角度指令,使用ngCordova包装器为cordova-plugin-inappbrowser强制链接在OS的浏览器中打开。

  2. 我已经设置了angular-marked的配置,以使用此伪指令渲染所有链接。

问题是链接无法在系统浏览器中打开。它们在当前的WebView中打开。可能是我的指令是错误的,或者在这种情况下指令甚至都不是正确的选择。

我在代码中干什么?我该如何解决在系统浏览器中打开链接的问题?

我的指令。

  .directive('fab-extLink', ['$cordovaInAppBrowser', function($cordovaInAppBrowser){

            return {
                restrict: 'A',
                link: function(scope, elem, attrs) {
                    elem.bind('click', function(e) {
                        // Stop the link from opening.
                        e.preventDefault();

                        // Open the link with the operating system browser.
                        $cordovaInAppBrowser.open(attrs.href, '_system');
                    });
                }
            };
    }])

我的配置

.config( [
      '$compileProvider',
      'markedProvider',
      function( $compileProvider, markedProvider)
      {
        $compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|ftp|mailto|chrome-extension):/);

        // When markdown is rendered use the external link directive.
        markedProvider.setRenderer({
          link: function(href, title, text) {
            return '<a fab-extLink href="' + href + '"' + (title ? ' title="' + title + '"' : '') + '>' + text + '</a>';
          }
        });
      }
    ])
凯文

您的代码有两个问题

1.角度指令的名称应为camelCase,它将转换为kebab-caseHTML。这很容易修复,只需更改即可

 .directive('fab-extLink', ['$cordovaInAppBrowser', function($cordovaInAppBrowser){

 .directive('fabExtlink', ['$cordovaInAppBrowser', function($cordovaInAppBrowser){

2.就您而言,<a fab-extlink>HTML中有,但是angular没有$compile(实例化)它。

这是一个困难的过程(如果您不想用猴子标记角度标记)。

angular-marked用于element.html(marked(text, scope.opts || null));设置元素的内部HTML,它会跳过angular的编译过程,因此不会初始化指令。

一种解决方法是使用全局函数(我知道不是很优雅):

在app.run中定义它:

.run(function ($cordovaInAppBrowser) {
  window.openInSystemBrowser=function(link){
     $cordovaInAppBrowser.open(link, '_system');
  };

并配置有角度标记以使用onclick,因此它独立于angular起作用。

markedProvider.setRenderer({
        link: function (href, title, text) {
          return '<a onclick="openInSystemBrowser(\'' + href + '\')"' + (title ? ' title="' + title + '"' : '') + '>' + text + '</a>';
        }
      });

我可以想到的另一种方法是分叉和修补有角度的标记。


猴子补丁解决方案:

  1. 打开 angular-marked.js
  2. 代替

    element.html(marked(text, scope.opts || null));
    

    element.replaceWith($compile(marked(text, scope.opts || null))(scope));
    

更新2

我检查了该存储库,最新版本的带角度标记(v1.2)支持名为的属性compile,即可完成此操作。

例如

<marked compile="true">
          # Markdown [Google](http://www.google.com)
          *It works!*
</marked>

因此,总而言之。


TLDR版本

1.改变

 .directive('fab-extLink', ...

 .directive('fabExtlink', ...

2.将属性添加compile='true'<marked>指令

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Angular Marked和Inappbrowser在系统浏览器中打开所有链接

来自分类Dev

使用离子应用程序内的系统浏览器打开所有链接

来自分类Dev

Webview尝试打开所有链接,但应在浏览器中打开

来自分类Dev

Webview尝试打开所有链接,但应在浏览器中打开

来自分类Dev

使用Angular 2跳过浏览器历史记录中的跳转链接

来自分类Dev

如何强制所有链接在桌面浏览器中打开?

来自分类Dev

如何通过单击链接在 Angular Front End Web App 的浏览器中下载或保存 .csv 文件?浏览器投诉没有文件

来自分类Dev

Angular 7应用程序在IE 11中出现错误,并且在所有其他浏览器中均能正常工作

来自分类Dev

由于仅Safari中的一行代码,Angular应用程序损坏,在所有其他浏览器中均可使用

来自分类Dev

Angular html5模式和HAL浏览器

来自分类Dev

Angular 9,KeyCloak,ServiceWorker和Edge浏览器

来自分类Dev

如何使用浏览器的Confirm()和Angular模板语句?

来自分类Dev

Angular 2 开发和浏览器缓存

来自分类Dev

Angular 和浏览器在加载数据方面的限制

来自分类Dev

在几个不同的浏览器选项卡中的Angular和TypeScript / javascript单例

来自分类Dev

使用Angular和Deno的浏览器中的CSS MIME不匹配

来自分类Dev

Angular 中浏览器显示和 Google Analytics 的动态页面标题

来自分类Dev

带有浏览器前缀的Angular 2 ngStyle

来自分类Dev

Angular 平台浏览器没有导出成员“MouseEvent”

来自分类Dev

浏览器中的Angular应用生存期

来自分类Dev

覆盖Angular中的浏览器“后退”按钮功能?

来自分类Dev

在angular js中更改浏览器的后退按钮的位置

来自分类Dev

浏览器中未遵守 Azure Angular Routing

来自分类Dev

如何在 Angular 中监听浏览器的关闭事件?

来自分类Dev

Angular 代码未在浏览器中显示结果

来自分类Dev

如何正常中断Cordova的InAppBrowser中某个URL的加载并在系统浏览器中打开它?

来自分类Dev

如何打开浏览器以及我在浏览器中添加的所有插件

来自分类Dev

cordova-plugin-inappbrowser 没有打开从 APP 到 IOS 设备默认浏览器的链接

来自分类Dev

浏览器与angular.js和angular-ui引导程序的兼容性

Related 相关文章

  1. 1

    Angular Marked和Inappbrowser在系统浏览器中打开所有链接

  2. 2

    使用离子应用程序内的系统浏览器打开所有链接

  3. 3

    Webview尝试打开所有链接,但应在浏览器中打开

  4. 4

    Webview尝试打开所有链接,但应在浏览器中打开

  5. 5

    使用Angular 2跳过浏览器历史记录中的跳转链接

  6. 6

    如何强制所有链接在桌面浏览器中打开?

  7. 7

    如何通过单击链接在 Angular Front End Web App 的浏览器中下载或保存 .csv 文件?浏览器投诉没有文件

  8. 8

    Angular 7应用程序在IE 11中出现错误,并且在所有其他浏览器中均能正常工作

  9. 9

    由于仅Safari中的一行代码,Angular应用程序损坏,在所有其他浏览器中均可使用

  10. 10

    Angular html5模式和HAL浏览器

  11. 11

    Angular 9,KeyCloak,ServiceWorker和Edge浏览器

  12. 12

    如何使用浏览器的Confirm()和Angular模板语句?

  13. 13

    Angular 2 开发和浏览器缓存

  14. 14

    Angular 和浏览器在加载数据方面的限制

  15. 15

    在几个不同的浏览器选项卡中的Angular和TypeScript / javascript单例

  16. 16

    使用Angular和Deno的浏览器中的CSS MIME不匹配

  17. 17

    Angular 中浏览器显示和 Google Analytics 的动态页面标题

  18. 18

    带有浏览器前缀的Angular 2 ngStyle

  19. 19

    Angular 平台浏览器没有导出成员“MouseEvent”

  20. 20

    浏览器中的Angular应用生存期

  21. 21

    覆盖Angular中的浏览器“后退”按钮功能?

  22. 22

    在angular js中更改浏览器的后退按钮的位置

  23. 23

    浏览器中未遵守 Azure Angular Routing

  24. 24

    如何在 Angular 中监听浏览器的关闭事件?

  25. 25

    Angular 代码未在浏览器中显示结果

  26. 26

    如何正常中断Cordova的InAppBrowser中某个URL的加载并在系统浏览器中打开它?

  27. 27

    如何打开浏览器以及我在浏览器中添加的所有插件

  28. 28

    cordova-plugin-inappbrowser 没有打开从 APP 到 IOS 设备默认浏览器的链接

  29. 29

    浏览器与angular.js和angular-ui引导程序的兼容性

热门标签

归档