diff options
| author | Igor Minar | 2013-02-14 15:13:50 -0800 | 
|---|---|---|
| committer | Igor Minar | 2013-02-14 16:43:28 -0800 | 
| commit | 8043784fd73a4768f4e904fd4121b21cd1fb49b4 (patch) | |
| tree | a47e876d83ddcda1f86c88daae78fba9979e1c48 /src/ng | |
| parent | 526a6b31e53a89c8941d976b476d54dac3908781 (diff) | |
| download | angular.js-8043784fd73a4768f4e904fd4121b21cd1fb49b4.tar.bz2 | |
fix(a): workaround IE bug affecting mailto urls
Apparently there is a really weird bug in IE6-8 that causes anchor textContent
to be reset with href content when both contain @ symbol.
Inserting a bogus comment node into all anchor elements in IE works around this
browser bug.
I'm fixing the issue via directive because that way we'll fix it for jQuery as
well.
I fixed an e2e test too because it was incorrect.
Closes #1949
Diffstat (limited to 'src/ng')
| -rw-r--r-- | src/ng/directive/a.js | 18 | ||||
| -rw-r--r-- | src/ng/directive/booleanAttrs.js | 2 | 
2 files changed, 15 insertions, 5 deletions
diff --git a/src/ng/directive/a.js b/src/ng/directive/a.js index 9b6c67c9..7ee8f572 100644 --- a/src/ng/directive/a.js +++ b/src/ng/directive/a.js @@ -16,10 +16,20 @@  var htmlAnchorDirective = valueFn({    restrict: 'E',    compile: function(element, attr) { -    // turn <a href ng-click="..">link</a> into a link in IE -    // but only if it doesn't have name attribute, in which case it's an anchor -    if (!attr.href) { -      attr.$set('href', ''); + +    if (msie <= 8) { + +      // turn <a href ng-click="..">link</a> into a stylable link in IE +      // but only if it doesn't have name attribute, in which case it's an anchor +      if (!attr.href && !attr.name) { +        attr.$set('href', ''); +      } + +      // add a comment node to anchors to workaround IE bug that causes element content to be reset +      // to new attribute content if attribute is updated with value containing @ and element also +      // contains value with @ +      // see issue #1949 +      element.append(document.createComment('IE fix'));      }      return function(scope, element) { diff --git a/src/ng/directive/booleanAttrs.js b/src/ng/directive/booleanAttrs.js index 8902c35d..80de41a4 100644 --- a/src/ng/directive/booleanAttrs.js +++ b/src/ng/directive/booleanAttrs.js @@ -66,7 +66,7 @@          it('should execute ng-click but not reload when no href but name specified', function() {            element('#link-5').click();            expect(input('value').val()).toEqual('5'); -          expect(element('#link-5').attr('href')).toBe(''); +          expect(element('#link-5').attr('href')).toBe(undefined);          });          it('should only change url when only ng-href', function() {  | 
