{ "events": [ { "frameId": 0, "parentFrameId": -1, "processId": -1, "tabId": 840, "timeStamp": 1511608420274.52, "url": "https://github.com/franzenzenhofer/f19n-obtrusive-livetest", "event": "onBeforeNavigate" }, { "frameId": 0, "method": "GET", "parentFrameId": -1, "requestId": "3153", "tabId": 840, "timeStamp": 1511608420275.369, "type": "main_frame", "url": "https://github.com/franzenzenhofer/f19n-obtrusive-livetest", "event": "onBeforeRequest" }, { "frameId": 0, "method": "GET", "parentFrameId": -1, "requestId": "3153", "tabId": 840, "timeStamp": 1511608420275.878, "type": "main_frame", "url": "https://github.com/franzenzenhofer/f19n-obtrusive-livetest", "event": "onBeforeSendHeaders" }, { "frameId": 0, "method": "GET", "parentFrameId": -1, "requestId": "3153", "responseHeaders": { "server": "GitHub.com", "date": "Sat, 25 Nov 2017 11:13:40 GMT", "content-type": "text/html; charset=utf-8", "transfer-encoding": "chunked", "status": "200 OK", "cache-control": "no-cache", "vary": "X-PJAX", "x-ua-compatible": "IE=Edge,chrome=1", "set-cookie": "_gh_sess=eyJzZXNzaW9uX2lkIjoiMmM0NWM0OTgxMWZmMTE0MzlkYWFjYWZiMmVjNzg4N2UiLCJsYXN0X3JlYWRfZnJvbV9yZXBsaWNhcyI6MTUxMTYwODQyMDg4Nywic3B5X3JlcG8iOiJmcmFuemVuemVuaG9mZXIvZjE5bi1vYnRydXNpdmUtbGl2ZXRlc3QiLCJzcHlfcmVwb19hdCI6MTUxMTYwODQyMCwiX2NzcmZfdG9rZW4iOiJsOEpyc3ZoS1BIZkZibm5tMy9WQ2R0NUtQMHFWVW9NWTg5NGJycDJwWU9FPSIsImZsYXNoIjp7ImRpc2NhcmQiOlsiYW5hbHl0aWNzX2xvY2F0aW9uIl0sImZsYXNoZXMiOnsiYW5hbHl0aWNzX2xvY2F0aW9uIjoiLzx1c2VyLW5hbWU%2BLzxyZXBvLW5hbWU%2BIn19fQ%3D%3D--f9e0bee8299c0f639435fc7251c739eaef114609; path=/; secure; HttpOnly", "x-request-id": "267e4d735b75b334e397cdf29bd4c9c4", "x-runtime": "0.194116", "expect-ct": "max-age=2592000, report-uri=\"https://api.github.com/_private/browser/errors\"", "content-security-policy": "default-src 'none'; base-uri 'self'; block-all-mixed-content; child-src render.githubusercontent.com; connect-src 'self' uploads.github.com status.github.com collector.githubapp.com api.github.com www.google-analytics.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com wss://live.github.com; font-src assets-cdn.github.com; form-action 'self' github.com gist.github.com; frame-ancestors 'none'; img-src 'self' data: assets-cdn.github.com identicons.github.com collector.githubapp.com github-cloud.s3.amazonaws.com *.githubusercontent.com; media-src 'none'; script-src assets-cdn.github.com; style-src 'unsafe-inline' assets-cdn.github.com", "strict-transport-security": "max-age=31536000; includeSubdomains; preload", "public-key-pins": "max-age=0; pin-sha256=\"WoiWRyIOVNa9ihaBciRSC7XHjliYS9VwUGOIud4PB18=\"; pin-sha256=\"RRM1dGqnDFsCJXBTHky16vi1obOlCgFFn/yOhI/y+ho=\"; pin-sha256=\"k2v657xBsOVe1PQRwOsHsw3bsGT2VzIqz5K+59sNQws=\"; pin-sha256=\"K87oWBWM9UZfyddvDfoxL+8lpNyoUB2ptGtn0fv6G2Q=\"; pin-sha256=\"IQBnNBEiFuhj+8x6X8XLgh01V9Ic5/V3IRQLNFFc7v4=\"; pin-sha256=\"iie1VXtL7HzAMF+/PVPR9xzT80kQxdZeJ+zduCB3uj0=\"; pin-sha256=\"LvRiGEjRqfzurezaWuj8Wie2gyHMrW5Q06LspMnox7A=\"; includeSubDomains", "x-content-type-options": "nosniff", "x-frame-options": "deny", "x-xss-protection": "1; mode=block", "x-runtime-rack": "0.202081", "content-encoding": "gzip", "x-github-request-id": "CEC5:3DB9:3E294EB:6717FE8:5A195064" }, "statusCode": 200, "statusLine": "HTTP/1.1 200 OK", "tabId": 840, "timeStamp": 1511608420999.146, "type": "main_frame", "url": "https://github.com/franzenzenhofer/f19n-obtrusive-livetest", "rawResponseHeaders": { "Server": "GitHub.com", "Date": "Sat, 25 Nov 2017 11:13:40 GMT", "Content-Type": "text/html; charset=utf-8", "Transfer-Encoding": "chunked", "Status": "200 OK", "Cache-Control": "no-cache", "Vary": "X-PJAX", "X-UA-Compatible": "IE=Edge,chrome=1", "Set-Cookie": "_gh_sess=eyJzZXNzaW9uX2lkIjoiMmM0NWM0OTgxMWZmMTE0MzlkYWFjYWZiMmVjNzg4N2UiLCJsYXN0X3JlYWRfZnJvbV9yZXBsaWNhcyI6MTUxMTYwODQyMDg4Nywic3B5X3JlcG8iOiJmcmFuemVuemVuaG9mZXIvZjE5bi1vYnRydXNpdmUtbGl2ZXRlc3QiLCJzcHlfcmVwb19hdCI6MTUxMTYwODQyMCwiX2NzcmZfdG9rZW4iOiJsOEpyc3ZoS1BIZkZibm5tMy9WQ2R0NUtQMHFWVW9NWTg5NGJycDJwWU9FPSIsImZsYXNoIjp7ImRpc2NhcmQiOlsiYW5hbHl0aWNzX2xvY2F0aW9uIl0sImZsYXNoZXMiOnsiYW5hbHl0aWNzX2xvY2F0aW9uIjoiLzx1c2VyLW5hbWU%2BLzxyZXBvLW5hbWU%2BIn19fQ%3D%3D--f9e0bee8299c0f639435fc7251c739eaef114609; path=/; secure; HttpOnly", "X-Request-Id": "267e4d735b75b334e397cdf29bd4c9c4", "X-Runtime": "0.194116", "Expect-CT": "max-age=2592000, report-uri=\"https://api.github.com/_private/browser/errors\"", "Content-Security-Policy": "default-src 'none'; base-uri 'self'; block-all-mixed-content; child-src render.githubusercontent.com; connect-src 'self' uploads.github.com status.github.com collector.githubapp.com api.github.com www.google-analytics.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com wss://live.github.com; font-src assets-cdn.github.com; form-action 'self' github.com gist.github.com; frame-ancestors 'none'; img-src 'self' data: assets-cdn.github.com identicons.github.com collector.githubapp.com github-cloud.s3.amazonaws.com *.githubusercontent.com; media-src 'none'; script-src assets-cdn.github.com; style-src 'unsafe-inline' assets-cdn.github.com", "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", "Public-Key-Pins": "max-age=0; pin-sha256=\"WoiWRyIOVNa9ihaBciRSC7XHjliYS9VwUGOIud4PB18=\"; pin-sha256=\"RRM1dGqnDFsCJXBTHky16vi1obOlCgFFn/yOhI/y+ho=\"; pin-sha256=\"k2v657xBsOVe1PQRwOsHsw3bsGT2VzIqz5K+59sNQws=\"; pin-sha256=\"K87oWBWM9UZfyddvDfoxL+8lpNyoUB2ptGtn0fv6G2Q=\"; pin-sha256=\"IQBnNBEiFuhj+8x6X8XLgh01V9Ic5/V3IRQLNFFc7v4=\"; pin-sha256=\"iie1VXtL7HzAMF+/PVPR9xzT80kQxdZeJ+zduCB3uj0=\"; pin-sha256=\"LvRiGEjRqfzurezaWuj8Wie2gyHMrW5Q06LspMnox7A=\"; includeSubDomains", "X-Content-Type-Options": "nosniff", "X-Frame-Options": "deny", "X-XSS-Protection": "1; mode=block", "X-Runtime-rack": "0.202081", "Content-Encoding": "gzip", "X-GitHub-Request-Id": "CEC5:3DB9:3E294EB:6717FE8:5A195064" }, "event": "onHeadersReceived" }, { "frameId": 0, "fromCache": false, "ip": "192.30.253.112", "method": "GET", "parentFrameId": -1, "requestId": "3153", "statusCode": 200, "statusLine": "HTTP/1.1 200 OK", "tabId": 840, "timeStamp": 1511608420999.6929, "type": "main_frame", "url": "https://github.com/franzenzenhofer/f19n-obtrusive-livetest", "event": "onResponseStarted" }, { "frameId": 0, "fromCache": false, "ip": "192.30.253.112", "method": "GET", "parentFrameId": -1, "requestId": "3153", "statusCode": 200, "statusLine": "HTTP/1.1 200 OK", "tabId": 840, "timeStamp": 1511608421122.655, "type": "main_frame", "url": "https://github.com/franzenzenhofer/f19n-obtrusive-livetest", "event": "onCompleted" }, { "frameId": 0, "processId": 115, "tabId": 840, "timeStamp": 1511608421188.3918, "transitionQualifiers": [ "from_address_bar" ], "transitionType": "typed", "url": "https://github.com/franzenzenhofer/f19n-obtrusive-livetest", "event": "onCommitted" }, { "html": "\n \n \n \n \n \n \n \n \n\n\n\n \n \n \n \n \n \n\n \n \n GitHub - franzenzenhofer/f19n-obtrusive-livetest: A sandboxed, extendable testing chrome extension and framework! It runs pre-defined and custom tests on each page that you visit.\n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n\n \n\n \n\n\n/\" data-pjax-transient=\"true\" name=\"analytics-location\">\n\n\n\n\n \n\n\n \n\n \n \n\n \n \n\n\n \n\n \n \n\n \n\n \n \n\n \n\n\n \n\n\n \n\n \n\n \n \n\n\n\n\n \n\n \n\n \n \n\n
\n Skip to content\n
\n\n \n \n \n\n\n\n
\n
\n
\n \n \n \n\n
\n\n
\n \n\n
\n
\n \n\n
\n\n \n \n \n
\n
\n
\n
\n\n\n
\n\n
\n\n
\n
\n\n\n\n
\n
\n
\n \n\n\n\n\n
\n
\n\n \n\n

\n \n franzenzenhofer/f19n-obtrusive-livetest\n\n

\n\n
\n \n\n\n\n
\n\n
\n
\n\n \n
\n
\n
\n
\n \n
\n

Join GitHub today

\n

GitHub is home to over 20 million developers working together to host and review code, manage projects, and build software together.

\n

\n Sign up\n

\n
\n
\n
\n\n\n
\n
\n
\n \n A sandboxed, extendable testing chrome extension and framework! It runs pre-defined and custom tests on each page that you visit.\n \n https://chrome.google.com/webstore/de…\n
\n\n
\n\n \n
\n\n\n\n
\n
\n
\n \n\n
\n
    \n
  1. \n \n \n JavaScript\n 91.9%\n \n
  2. \n
  3. \n \n \n CSS\n 7.3%\n \n
  4. \n
  5. \n \n \n Other\n 0.8%\n \n
  6. \n
\n
\n
\n
\n
\n\n
\n JavaScript\n CSS\n Other\n
\n\n\n\n
\n\n
\n \n Clone or download\n \n \n
\n
\n
\n\n

\n Clone with HTTPS\n \n \n \n

\n

\n Use Git or checkout with SVN using the web URL.\n

\n\n
\n \n
\n \n
\n
\n\n
\n\n \n
\n
\n
\n\n\n \n\n \n
\n \n\n
\n\n
\n
\n \n Switch branches/tags\n
\n\n
\n
\n \n
\n
\n \n
\n
\n\n
\n\n \n\n
Nothing to show
\n
\n\n
\n
\n\n\n
\n\n
Nothing to show
\n
\n\n
\n
\n
\n\n\n \n\n
\n \n
\n
\n\n\n \n\n\n
\n \n Latest commit\n \n 81b93d5\n \n 6 days ago\n \n\n\n \n \n \"@franzenzenhofer\"\n \n \n franzenzenhofer\n\n \n\n new version\n\n\n
\n\n\n\n
\n\n Permalink\n\n \n\n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Failed to load latest commit information.
\n \n \"\"\n \n .vscode\n \n \n VS Code settings\n \n \n a month ago\n
\n \n \"\"\n \n promotion\n \n \n Merge branch 'master' of github.com:franzenzenhofer/f19n-obtrusive-li…\n \n \n 4 months ago\n
\n \n \"\"\n \n sample-rules\n \n \n clean up\n \n \n 8 days ago\n
\n \n \"\"\n \n src\n \n \n new version\n \n \n 6 days ago\n
\n \n \"\"\n \n test\n \n \n make URLs downloadable & adding \"what\" hint to rules\n \n \n a year ago\n
\n \n \"\"\n \n .eslintrc\n \n \n rules list polishing\n \n \n 2 years ago\n
\n \n \"\"\n \n .gitignore\n \n \n new version\n \n \n 6 days ago\n
\n \n \"\"\n \n Gruntfile.js\n \n \n codeview preparation\n \n \n a month ago\n
\n \n \"\"\n \n README.md\n \n \n v 0.0.2.\n \n \n 4 months ago\n
\n \n \"\"\n \n build.zip\n \n \n clean up\n \n \n 8 days ago\n
\n \n \"\"\n \n package-lock.json\n \n \n popup css\n \n \n a month ago\n
\n \n \"\"\n \n package.json\n \n \n new version\n \n \n 6 days ago\n
\n \n \"\"\n \n privacy.md\n \n \n Change wrong spelling\n \n \n 4 months ago\n
\n \n \"\"\n \n temp.js\n \n \n now with asyn rules\n \n \n a year ago\n
\n \n \"\"\n \n yarn.lock\n \n \n new rules & yarn\n \n \n a year ago\n
\n\n
\n\n\n\n
\n

\n \n README.md\n

\n\n

\"Obtrusive

\n

f19n Obtrusive Livetest Chrome Extension

\n

by http://www.fullstackoptimization.com/\ndeveloped in cooperation with https://die-antwort.eu/

\n

Chrome App Store: https://chrome.google.com/webstore/detail/f19n-obstrusive-live-test/jbnaibigcohjfefpfocphcjeliohhold?hl=en

\n

What is it?

\n

It's a sandboxed, extendable testing chrome extension and framework! It runs pre-defined and custom tests on each page that you visit.

\n

\"Sample

\n

What does it do?

\n

The extension collects the whole lifecycle of a pageload (http-headers, onpageload, onDOMready, ...) in an object, then it executes javascript functions against this object and returns testing feedback.

\n

It has multiple pre-defined rules currently targeting SEO and webperformance best practices.

\n

See /src/public/default-rules for a list of what currently gets tested.

\n

Additional it can call third party REST-APIs from within these rules.

\n

What can it do?

\n

Everything! You can write your own tests! Anything that happens in the browser during the pageload and render lifecycle can be inspected and dissected!

\n

Development

\n

Install all dependencies

\n
npm install
\n

Run the build process

\n

run the build process once (for this you need grunt-cli installed npm install -g grunt-cli)

\n
grunt
\n

or if you want to automatically reload the extension after every change. Its required if you make changes inside RuleContext.js or other core scripts. Its not required if you just work on custom rules.

\n

first install https://github.com/prasmussen/chrome-cli

\n
brew install chrome-cli
\n

then:

\n
grunt --reload-extension
\n

Open chrome://extensions/ and point the installation of an unpacked extension to the ./build folder

\n

Rules

\n

The production ready rules can be found within /src/public/default-rules

\n

Inside /sample-rules are some sample rules plus the documentation how to write your own rules.

\n

License

\n
    \n
  • All rules within the /sample-rules/ directory are MIT licensed.
  • \n
  • All rules within the /public/default-rules/ directory are MIT licensed.
  • \n
  • See details within the directory.
  • \n
\n

All other code within this repository - if not defined otherwise - is currently available under a

\n

Contribution License.

\n

You are welcome to

\n
    \n
  • review the code
  • \n
  • install the application in your browser
  • \n
  • submit issues, pull requests, any other feedback
  • \n
  • compile and use this extension in development mode on your computer with the goal of learning about the codebase or delivering feedback
  • \n
  • use code for educational purposes for yourself or within your organization
  • \n
\n

Currently don't

\n
    \n
  • remove this license
  • \n
  • remove branding or links from/to www.fullstackoptimization.com
  • \n
  • create a free or commercial product based upon the code of this repository
  • \n
  • submit a product based on this code to any app store
  • \n
  • install this extension in developer mode on multiple computers within your company
  • \n
\n

These restrictions do not apply to the /sample-rules/ and the /public/default-rules/ code.

\n

This license might change in the future. I must just figure out what the best long term license for this product will be.

\n

Rightsholder: Franz Enzenhofer fe at f19n dot com

\n
\n
\n\n\n
\n
\n
\n\n
\n
\n\n
\n\n \n
\n
\n \n\n \n \n\n \n
\n
\n\n\n\n
\n \n \n You can't perform that action at this time.\n
\n\n\n \n \n \n \n \n \n \n \n
\n \n You signed in with another tab or window. Reload to refresh your session.\n You signed out in another tab or window. Reload to refresh your session.\n
\n
\n
\n
\n
\n \n
\n
\n\n\n \n\n\n", "location": { "href": "https://github.com/franzenzenhofer/f19n-obtrusive-livetest", "ancestorOrigins": {}, "origin": "https://github.com", "protocol": "https:", "host": "github.com", "hostname": "github.com", "port": "", "pathname": "/franzenzenhofer/f19n-obtrusive-livetest", "search": "", "hash": "" }, "event": "DOMContentLoaded" }, { "html": "\n \n \n \n \n \n \n \n \n\n\n\n \n \n \n \n \n \n\n \n \n GitHub - franzenzenhofer/f19n-obtrusive-livetest: A sandboxed, extendable testing chrome extension and framework! It runs pre-defined and custom tests on each page that you visit.\n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n\n \n\n \n\n\n/\" data-pjax-transient=\"true\" name=\"analytics-location\">\n\n\n\n\n \n\n\n \n\n \n \n\n \n \n\n\n \n\n \n \n\n \n\n \n \n\n \n\n\n \n\n\n \n\n \n\n \n \n\n\n\n\n \n\n \n\n \n \n\n
\n Skip to content\n
\n\n \n \n \n\n\n\n
\n
\n
\n \n \n \n\n
\n\n
\n \n\n
\n
\n \n\n
\n\n \n \n \n
\n
\n
\n
\n\n\n
\n\n
\n\n
\n
\n\n\n\n
\n
\n
\n \n\n\n\n\n
\n
\n\n \n\n

\n \n franzenzenhofer/f19n-obtrusive-livetest\n\n

\n\n
\n \n\n\n\n
\n\n
\n
\n\n \n
\n
\n
\n
\n \n
\n

Join GitHub today

\n

GitHub is home to over 20 million developers working together to host and review code, manage projects, and build software together.

\n

\n Sign up\n

\n
\n
\n
\n\n\n
\n
\n
\n \n A sandboxed, extendable testing chrome extension and framework! It runs pre-defined and custom tests on each page that you visit.\n \n https://chrome.google.com/webstore/de…\n
\n\n
\n\n \n
\n\n\n\n
\n
\n
\n \n\n
\n
    \n
  1. \n \n \n JavaScript\n 91.9%\n \n
  2. \n
  3. \n \n \n CSS\n 7.3%\n \n
  4. \n
  5. \n \n \n Other\n 0.8%\n \n
  6. \n
\n
\n
\n
\n
\n\n
\n JavaScript\n CSS\n Other\n
\n\n\n\n
\n\n
\n \n Clone or download\n \n \n
\n
\n
\n\n

\n Clone with HTTPS\n \n \n \n

\n

\n Use Git or checkout with SVN using the web URL.\n

\n\n
\n \n
\n \n
\n
\n\n
\n\n \n
\n
\n
\n\n\n \n\n \n
\n \n\n
\n\n
\n
\n \n Switch branches/tags\n
\n\n
\n
\n \n
\n
\n \n
\n
\n\n
\n\n \n\n
Nothing to show
\n
\n\n
\n
\n\n\n
\n\n
Nothing to show
\n
\n\n
\n
\n
\n\n\n \n\n
\n \n
\n
\n\n\n \n\n\n
\n \n Latest commit\n \n 81b93d5\n \n 6 days ago\n \n\n\n \n \n \"@franzenzenhofer\"\n \n \n franzenzenhofer\n\n \n\n new version\n\n\n
\n\n\n\n
\n\n Permalink\n\n \n\n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Failed to load latest commit information.
\n \n \"\"\n \n .vscode\n \n \n VS Code settings\n \n \n a month ago\n
\n \n \"\"\n \n promotion\n \n \n Merge branch 'master' of github.com:franzenzenhofer/f19n-obtrusive-li…\n \n \n 4 months ago\n
\n \n \"\"\n \n sample-rules\n \n \n clean up\n \n \n 8 days ago\n
\n \n \"\"\n \n src\n \n \n new version\n \n \n 6 days ago\n
\n \n \"\"\n \n test\n \n \n make URLs downloadable & adding \"what\" hint to rules\n \n \n a year ago\n
\n \n \"\"\n \n .eslintrc\n \n \n rules list polishing\n \n \n 2 years ago\n
\n \n \"\"\n \n .gitignore\n \n \n new version\n \n \n 6 days ago\n
\n \n \"\"\n \n Gruntfile.js\n \n \n codeview preparation\n \n \n a month ago\n
\n \n \"\"\n \n README.md\n \n \n v 0.0.2.\n \n \n 4 months ago\n
\n \n \"\"\n \n build.zip\n \n \n clean up\n \n \n 8 days ago\n
\n \n \"\"\n \n package-lock.json\n \n \n popup css\n \n \n a month ago\n
\n \n \"\"\n \n package.json\n \n \n new version\n \n \n 6 days ago\n
\n \n \"\"\n \n privacy.md\n \n \n Change wrong spelling\n \n \n 4 months ago\n
\n \n \"\"\n \n temp.js\n \n \n now with asyn rules\n \n \n a year ago\n
\n \n \"\"\n \n yarn.lock\n \n \n new rules & yarn\n \n \n a year ago\n
\n\n
\n\n\n\n
\n

\n \n README.md\n

\n\n

\"Obtrusive

\n

f19n Obtrusive Livetest Chrome Extension

\n

by http://www.fullstackoptimization.com/\ndeveloped in cooperation with https://die-antwort.eu/

\n

Chrome App Store: https://chrome.google.com/webstore/detail/f19n-obstrusive-live-test/jbnaibigcohjfefpfocphcjeliohhold?hl=en

\n

What is it?

\n

It's a sandboxed, extendable testing chrome extension and framework! It runs pre-defined and custom tests on each page that you visit.

\n

\"Sample

\n

What does it do?

\n

The extension collects the whole lifecycle of a pageload (http-headers, onpageload, onDOMready, ...) in an object, then it executes javascript functions against this object and returns testing feedback.

\n

It has multiple pre-defined rules currently targeting SEO and webperformance best practices.

\n

See /src/public/default-rules for a list of what currently gets tested.

\n

Additional it can call third party REST-APIs from within these rules.

\n

What can it do?

\n

Everything! You can write your own tests! Anything that happens in the browser during the pageload and render lifecycle can be inspected and dissected!

\n

Development

\n

Install all dependencies

\n
npm install
\n

Run the build process

\n

run the build process once (for this you need grunt-cli installed npm install -g grunt-cli)

\n
grunt
\n

or if you want to automatically reload the extension after every change. Its required if you make changes inside RuleContext.js or other core scripts. Its not required if you just work on custom rules.

\n

first install https://github.com/prasmussen/chrome-cli

\n
brew install chrome-cli
\n

then:

\n
grunt --reload-extension
\n

Open chrome://extensions/ and point the installation of an unpacked extension to the ./build folder

\n

Rules

\n

The production ready rules can be found within /src/public/default-rules

\n

Inside /sample-rules are some sample rules plus the documentation how to write your own rules.

\n

License

\n
    \n
  • All rules within the /sample-rules/ directory are MIT licensed.
  • \n
  • All rules within the /public/default-rules/ directory are MIT licensed.
  • \n
  • See details within the directory.
  • \n
\n

All other code within this repository - if not defined otherwise - is currently available under a

\n

Contribution License.

\n

You are welcome to

\n
    \n
  • review the code
  • \n
  • install the application in your browser
  • \n
  • submit issues, pull requests, any other feedback
  • \n
  • compile and use this extension in development mode on your computer with the goal of learning about the codebase or delivering feedback
  • \n
  • use code for educational purposes for yourself or within your organization
  • \n
\n

Currently don't

\n
    \n
  • remove this license
  • \n
  • remove branding or links from/to www.fullstackoptimization.com
  • \n
  • create a free or commercial product based upon the code of this repository
  • \n
  • submit a product based on this code to any app store
  • \n
  • install this extension in developer mode on multiple computers within your company
  • \n
\n

These restrictions do not apply to the /sample-rules/ and the /public/default-rules/ code.

\n

This license might change in the future. I must just figure out what the best long term license for this product will be.

\n

Rightsholder: Franz Enzenhofer fe at f19n dot com

\n
\n
\n\n\n
\n
\n
\n\n
\n
\n\n
\n\n \n
\n
\n \n\n \n \n\n \n
\n
\n\n\n\n
\n \n \n You can't perform that action at this time.\n
\n\n\n \n \n \n \n \n \n \n \n
\n \n You signed in with another tab or window. Reload to refresh your session.\n You signed out in another tab or window. Reload to refresh your session.\n
\n
\n
\n
\n
\n \n
\n
\n\n\n \n\n\n", "location": { "href": "https://github.com/franzenzenhofer/f19n-obtrusive-livetest", "ancestorOrigins": {}, "origin": "https://github.com", "protocol": "https:", "host": "github.com", "hostname": "github.com", "port": "", "pathname": "/franzenzenhofer/f19n-obtrusive-livetest", "search": "", "hash": "" }, "event": "documentEnd" }, { "snapshot": { "requestTime": 1511608420.249, "startLoadTime": 1511608420.249, "commitLoadTime": 1511608420.999, "finishDocumentLoadTime": 1511608421.653, "finishLoadTime": 0, "firstPaintTime": 0, "firstPaintAfterLoadTime": 0, "navigationType": "Other", "wasFetchedViaSpdy": false, "wasNpnNegotiated": true, "npnNegotiatedProtocol": "http/1.1", "wasAlternateProtocolAvailable": false, "connectionInfo": "http/1.1" }, "location": { "href": "https://github.com/franzenzenhofer/f19n-obtrusive-livetest", "ancestorOrigins": {}, "origin": "https://github.com", "protocol": "https:", "host": "github.com", "hostname": "github.com", "port": "", "pathname": "/franzenzenhofer/f19n-obtrusive-livetest", "search": "", "hash": "" }, "event": "chromeLoadTimes" }, { "snapshot": { "timing": { "navigationStart": 1511608420249, "unloadEventStart": 0, "unloadEventEnd": 0, "redirectStart": 0, "redirectEnd": 0, "fetchStart": 1511608420274, "domainLookupStart": 1511608420275, "domainLookupEnd": 1511608420321, "connectStart": 1511608420321, "connectEnd": 1511608420639, "secureConnectionStart": 1511608420490, "requestStart": 1511608420640, "responseStart": 1511608420999, "responseEnd": 1511608421123, "domLoading": 1511608421006, "domInteractive": 1511608421647, "domContentLoadedEventStart": 1511608421647, "domContentLoadedEventEnd": 1511608421653, "domComplete": 0, "loadEventStart": 0, "loadEventEnd": 0 }, "navigation": { "type": 0, "redirectCount": 0 } }, "location": { "href": "https://github.com/franzenzenhofer/f19n-obtrusive-livetest", "ancestorOrigins": {}, "origin": "https://github.com", "protocol": "https:", "host": "github.com", "hostname": "github.com", "port": "", "pathname": "/franzenzenhofer/f19n-obtrusive-livetest", "search": "", "hash": "" }, "event": "windowPerformance" }, { "html": "\n \n \n \n \n \n \n \n \n\n\n\n \n \n \n \n \n \n\n \n \n GitHub - franzenzenhofer/f19n-obtrusive-livetest: A sandboxed, extendable testing chrome extension and framework! It runs pre-defined and custom tests on each page that you visit.\n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n\n \n\n \n\n\n/\" data-pjax-transient=\"true\" name=\"analytics-location\">\n\n\n\n\n \n\n\n \n\n \n \n\n \n \n\n\n \n\n \n \n\n \n\n \n \n\n \n\n\n \n\n\n \n\n \n\n \n \n\n\n\n\n \n\n \n\n \n \n\n
\n Skip to content\n
\n\n \n \n \n\n\n\n
\n
\n
\n \n \n \n\n
\n\n
\n \n\n
\n
\n \n\n
\n\n \n \n \n
\n
\n
\n
\n\n\n
\n\n
\n\n
\n
\n\n\n\n
\n
\n
\n \n\n\n\n\n
\n
\n\n \n\n

\n \n franzenzenhofer/f19n-obtrusive-livetest\n\n

\n\n
\n \n\n\n\n
\n\n
\n
\n\n \n
\n
\n
\n
\n \n
\n

Join GitHub today

\n

GitHub is home to over 20 million developers working together to host and review code, manage projects, and build software together.

\n

\n Sign up\n

\n
\n
\n
\n\n\n
\n
\n
\n \n A sandboxed, extendable testing chrome extension and framework! It runs pre-defined and custom tests on each page that you visit.\n \n https://chrome.google.com/webstore/de…\n
\n\n
\n\n \n
\n\n\n\n
\n
\n
\n \n\n
\n
    \n
  1. \n \n \n JavaScript\n 91.9%\n \n
  2. \n
  3. \n \n \n CSS\n 7.3%\n \n
  4. \n
  5. \n \n \n Other\n 0.8%\n \n
  6. \n
\n
\n
\n
\n
\n\n
\n JavaScript\n CSS\n Other\n
\n\n\n\n
\n\n
\n \n Clone or download\n \n \n
\n
\n
\n\n

\n Clone with HTTPS\n \n \n \n

\n

\n Use Git or checkout with SVN using the web URL.\n

\n\n
\n \n
\n \n
\n
\n\n
\n\n \n
\n
\n
\n\n\n \n\n \n
\n \n\n
\n\n
\n
\n \n Switch branches/tags\n
\n\n
\n
\n \n
\n
\n \n
\n
\n\n
\n\n \n\n
Nothing to show
\n
\n\n
\n
\n\n\n
\n\n
Nothing to show
\n
\n\n
\n
\n
\n\n\n \n\n
\n \n
\n
\n\n\n \n\n\n
\n \n Latest commit\n \n 81b93d5\n \n 6 days ago\n \n\n\n \n \n \"@franzenzenhofer\"\n \n \n franzenzenhofer\n\n \n\n new version\n\n\n
\n\n\n\n
\n\n Permalink\n\n \n\n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Failed to load latest commit information.
\n \n \"\"\n \n .vscode\n \n \n VS Code settings\n \n \n a month ago\n
\n \n \"\"\n \n promotion\n \n \n Merge branch 'master' of github.com:franzenzenhofer/f19n-obtrusive-li…\n \n \n 4 months ago\n
\n \n \"\"\n \n sample-rules\n \n \n clean up\n \n \n 8 days ago\n
\n \n \"\"\n \n src\n \n \n new version\n \n \n 6 days ago\n
\n \n \"\"\n \n test\n \n \n make URLs downloadable & adding \"what\" hint to rules\n \n \n a year ago\n
\n \n \"\"\n \n .eslintrc\n \n \n rules list polishing\n \n \n 2 years ago\n
\n \n \"\"\n \n .gitignore\n \n \n new version\n \n \n 6 days ago\n
\n \n \"\"\n \n Gruntfile.js\n \n \n codeview preparation\n \n \n a month ago\n
\n \n \"\"\n \n README.md\n \n \n v 0.0.2.\n \n \n 4 months ago\n
\n \n \"\"\n \n build.zip\n \n \n clean up\n \n \n 8 days ago\n
\n \n \"\"\n \n package-lock.json\n \n \n popup css\n \n \n a month ago\n
\n \n \"\"\n \n package.json\n \n \n new version\n \n \n 6 days ago\n
\n \n \"\"\n \n privacy.md\n \n \n Change wrong spelling\n \n \n 4 months ago\n
\n \n \"\"\n \n temp.js\n \n \n now with asyn rules\n \n \n a year ago\n
\n \n \"\"\n \n yarn.lock\n \n \n new rules & yarn\n \n \n a year ago\n
\n\n
\n\n\n\n
\n

\n \n README.md\n

\n\n

\"Obtrusive

\n

f19n Obtrusive Livetest Chrome Extension

\n

by http://www.fullstackoptimization.com/\ndeveloped in cooperation with https://die-antwort.eu/

\n

Chrome App Store: https://chrome.google.com/webstore/detail/f19n-obstrusive-live-test/jbnaibigcohjfefpfocphcjeliohhold?hl=en

\n

What is it?

\n

It's a sandboxed, extendable testing chrome extension and framework! It runs pre-defined and custom tests on each page that you visit.

\n

\"Sample

\n

What does it do?

\n

The extension collects the whole lifecycle of a pageload (http-headers, onpageload, onDOMready, ...) in an object, then it executes javascript functions against this object and returns testing feedback.

\n

It has multiple pre-defined rules currently targeting SEO and webperformance best practices.

\n

See /src/public/default-rules for a list of what currently gets tested.

\n

Additional it can call third party REST-APIs from within these rules.

\n

What can it do?

\n

Everything! You can write your own tests! Anything that happens in the browser during the pageload and render lifecycle can be inspected and dissected!

\n

Development

\n

Install all dependencies

\n
npm install
\n

Run the build process

\n

run the build process once (for this you need grunt-cli installed npm install -g grunt-cli)

\n
grunt
\n

or if you want to automatically reload the extension after every change. Its required if you make changes inside RuleContext.js or other core scripts. Its not required if you just work on custom rules.

\n

first install https://github.com/prasmussen/chrome-cli

\n
brew install chrome-cli
\n

then:

\n
grunt --reload-extension
\n

Open chrome://extensions/ and point the installation of an unpacked extension to the ./build folder

\n

Rules

\n

The production ready rules can be found within /src/public/default-rules

\n

Inside /sample-rules are some sample rules plus the documentation how to write your own rules.

\n

License

\n
    \n
  • All rules within the /sample-rules/ directory are MIT licensed.
  • \n
  • All rules within the /public/default-rules/ directory are MIT licensed.
  • \n
  • See details within the directory.
  • \n
\n

All other code within this repository - if not defined otherwise - is currently available under a

\n

Contribution License.

\n

You are welcome to

\n
    \n
  • review the code
  • \n
  • install the application in your browser
  • \n
  • submit issues, pull requests, any other feedback
  • \n
  • compile and use this extension in development mode on your computer with the goal of learning about the codebase or delivering feedback
  • \n
  • use code for educational purposes for yourself or within your organization
  • \n
\n

Currently don't

\n
    \n
  • remove this license
  • \n
  • remove branding or links from/to www.fullstackoptimization.com
  • \n
  • create a free or commercial product based upon the code of this repository
  • \n
  • submit a product based on this code to any app store
  • \n
  • install this extension in developer mode on multiple computers within your company
  • \n
\n

These restrictions do not apply to the /sample-rules/ and the /public/default-rules/ code.

\n

This license might change in the future. I must just figure out what the best long term license for this product will be.

\n

Rightsholder: Franz Enzenhofer fe at f19n dot com

\n
\n
\n\n\n
\n
\n
\n\n
\n
\n\n
\n\n \n
\n
\n \n\n \n \n\n \n
\n
\n\n\n\n
\n \n \n You can't perform that action at this time.\n
\n\n\n \n \n \n \n \n \n \n \n
\n \n You signed in with another tab or window. Reload to refresh your session.\n You signed out in another tab or window. Reload to refresh your session.\n
\n
\n
\n
\n
\n \n
\n
\n\n\n \n\n\n", "location": { "href": "https://github.com/franzenzenhofer/f19n-obtrusive-livetest", "ancestorOrigins": {}, "origin": "https://github.com", "protocol": "https:", "host": "github.com", "hostname": "github.com", "port": "", "pathname": "/franzenzenhofer/f19n-obtrusive-livetest", "search": "", "hash": "" }, "event": "documentIdle" } ] }