Commit 10495da5 10495da54a17f73579dd1c7f5ffb4202ab71d54a by Nicolas Perriault

fixes #178 - plain text version for non-html contents.

1 parent 7d9f0e18
...@@ -943,36 +943,10 @@ Casper.prototype.getPageContent = function getPageContent() { ...@@ -943,36 +943,10 @@ Casper.prototype.getPageContent = function getPageContent() {
943 "use strict"; 943 "use strict";
944 this.checkStarted(); 944 this.checkStarted();
945 var contentType = utils.getPropertyPath(this, 'currentResponse.contentType'); 945 var contentType = utils.getPropertyPath(this, 'currentResponse.contentType');
946 if (!utils.isString(contentType)) { 946 if (!utils.isString(contentType) || contentType.indexOf("text/html") !== -1) {
947 return this.page.frameContent; 947 return this.page.frameContent;
948 } 948 }
949 // for some reason (qt)webkit/Gecko will always enclose non text/html body contents within an html 949 return this.page.framePlainText;
950 // structure like this:
951 // webkit: <html><head></head><body><pre style="(...)">content</pre></body></html>
952 // gecko: <html><head><link rel="alternate stylesheet" type="text/css" href="resource://gre-resources/plaintext.css" title="..."></head><body><pre>document.write('foo');\n</pre></body></html>
953 var sanitizedHtml = this.evaluate(function checkHtml() {
954 var head = __utils__.findOne('head'),
955 body = __utils__.findOne('body');
956 if (!head || !body) {
957 return null;
958 }
959 // for content in Webkit
960 if (head.childNodes.length === 0 &&
961 body.childNodes.length === 1 &&
962 __utils__.findOne('body pre[style]')) {
963 return __utils__.findOne('body pre').textContent.trim();
964 }
965 // for content in Gecko
966 if (head.childNodes.length === 1 &&
967 body.childNodes.length === 1 &&
968 head.childNodes[0].localName === 'link' &&
969 head.childNodes[0].getAttribute('href') === 'resource://gre-resources/plaintext.css' &&
970 body.childNodes[0].localName === 'pre' ) {
971 return body.childNodes[0].textContent.trim();
972 }
973 return null;
974 });
975 return sanitizedHtml ? sanitizedHtml : this.page.frameContent;
976 }; 950 };
977 951
978 /** 952 /**
......
...@@ -13,7 +13,7 @@ casper.test.begin("Casper.getPageContent() text/html content", 1, function(test) ...@@ -13,7 +13,7 @@ casper.test.begin("Casper.getPageContent() text/html content", 1, function(test)
13 13
14 casper.test.begin("Casper.getPageContent() non text/html content", 1, function(test) { 14 casper.test.begin("Casper.getPageContent() non text/html content", 1, function(test) {
15 casper.start("tests/site/dummy.js", function() { 15 casper.start("tests/site/dummy.js", function() {
16 test.assertEquals(this.getPageContent(), "document.write('foo');", 16 test.assertEquals(this.getPageContent(), "document.write('foo');\n",
17 "Casper.getPageContent() retrieves non text/html content"); 17 "Casper.getPageContent() retrieves non text/html content");
18 }).run(function() { 18 }).run(function() {
19 test.done(); 19 test.done();
......