filtrowanie treści strony

w dziale Dostosowywanie Opery do własnych potrzeb
yakuna napisał(a):

witam,

czy jest jakiś sposób w Operze aby zablokować strony internetowe, na których występują określone słowa, np. sex, porno, różnego rodzaju przekleństwa. Chodzi mi o coś w rodzaju narzędzia "Zablokowana zawartość" ale filtrujące tekst znajdujący się na stronie a nie adresy URL. Słyszał ktoś o czymś takim? wink

pozdrawiam

Barthezdeleted napisał(a):

To chyba raczej z poziomu programu do ochrony rodzicielskiej. Na przykład K9 Web Protection smile

uniqiq napisał(a):

Łatwo można coś takiego zrobić. Wygooglałem i znalazłem coś takiego: Jmaxxz vulgar word blocker - wygląda na userscript, który zamienia wulgarne słowa na stronie na nie wulgarne. Niestety w języku angielskim, ale dodanie polskich słów to 5 minut roboty. Można też zablokować całą stronę. Taki userscript też znalazłem: Block.

uniqiq napisał(a):

na prędce zrobiłem coś takiego:

// ==UserScript== 
// @name page blocker
// @namespace none 
// @description block pages with some words
// @include * 
// @version 1.1.1
// @homepage none

/* 
If you plan on editing this script and publishing your own version lines 9 through 15 must be
included somewhere in your source code somewhere between lines 1 and 40.

Based on a script in Mark Pilgram's upcoming "Dive into Greasemonkey" 
The Jmaxxz Vulgar Word Blocker can be found at: http://userscripts.org/scripts/show/2287
A Special thank you goes to rschultz2002 and Giorgio Maone for their help in the making of this script
*/ 

// based on:
// Block web pages - replace content with "Get back to work!" text - user script
// version 0.1
// 2007-10-10
// Copyright (c) 2007, Bjoern Guenzel
// Released under the GPL license
// http://www.gnu.org/copyleft/gpl.html

// ==/UserScript==

var bad = new Array(
"porn", 
"xxx",
"sex"
)

var isDebugging = false;

function debug(message){
	if(isDebugging){
		GM_log(message);
	}
}

function removeChildNodes(elem){
	while(elem.hasChildNodes()){
		var child = elem.firstChild;
		debug("remove child: "+child);
		elem.removeChild(child);
	}
}

function blockContent(){
	debug("starting block");

	var bodies = document.getElementsByTagName('body');

	debug("bodies: "+bodies);

	if(bodies && bodies.length > 0){
		var i = 0;
		
		for(i = 0;i<bodies.length;i++){
			var body = bodies[i];
			
			if(body.hasChildNodes()){
				//remove all children
				debug("has child nodes");
				removeChildNodes(body);
				debug("removed");
			}
			
			var textContainer = document.createElement("span");
			var blockText = document.createTextNode("page blocked!");
			textContainer.appendChild(blockText);
		
			body.appendChild(textContainer);
			textContainer.setAttribute("style","color: black; font-size: 20px;font-family: sans-serif;");
			body.setAttribute("style","background-color: white;text-align: left;padding: 20px;margin: 0px;");
		}
	}
}

function mustBeBlocked(text) {
	for (var i=0; i<bad.length; i++)
		if (text.indexOf(bad[i]) > 0)
			return true;
	return false;
}

// replace in body text 
var textnodes = document.evaluate( "//body//text()", document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); 
  for (var i = 0; i < textnodes.snapshotLength; i++) { 
  node = textnodes.snapshotItem(i);
  if (mustBeBlocked(""+node.data)) {
	  blockContent();
	  break;
  }
}


Trzeba to zapisać jako plik z rozszerzeniem .user.js - na przykład pageBlocker.user.js w katalogu w którym są skrypty opery. Oczywiście trzeba też dodać nowe słowa - tam gdzie wpisałem xxx, porn i sex. Mimo wszystko to raczej słabe zabezpieczenie.

Woj72 napisał(a):

Albo tutaj

yakuna napisał(a):

Barthez i Woj72, dzięki za propozycje ale programy zewnętrzne to dla mnie niepotrzebne zamulanie systemu wink

Z kolei uniqiq, Twoja propozycja to coś czego szukałem, podany UserJS sprawdza się znakomicie! Wielkie dzięki za pomoc! smile
Pozwoliłem sobie jeszcze tylko na dodanie na początku formułki do wykonywania (bądź nie) na określonych stronach. Gdyby ktoś był ciekawy to wzór wygląda tak (zaczerpnięte z tutoriali na opera.com):

// ==UserScript==
	// @include http://example.com/*
	// @include http://www.example.com/*
	// @exclude http://example.com/directory/*
	// @exclude http://www.example.com/example.html
	// ==/UserScript==

uniqiq napisał(a):

Jest jeszcze jedna rzecz "nie tak". Opera może zacząć wyświetlać strony zanim je do końca wczyta. Skrypt musi się uruchomić dopiero po wczytaniu się strony, wiec jeżeli łącze nie jest wystarczająco szybkie Opera pokazuje stronę do czasu uruchomienia skryptu. Należy więc wyłączyć opcję wyświetlania nie wczytanych do końca stron Ctrl+F12/Advanced/Browsing/Loading = Redraw when loaded

yakuna napisał(a):

@uniqiq OK, dzięki za wskazówkę, tez zauważyłem ten problem wink

A przy okazji jeszcze jedno pytanko, zanim zamieszczone zostały odpowiedzi w temacie grzebałem w folderze Opery w poszukiwaniu jakiegoś rozwiązania i natknąłem się na plik o nazwie contentblock.css w katalogu Styles. Jakie jest jego zadanie bo nazwa sugerowałaby, że to coś zbliżonego do tematu?? wink

Barthezdeleted napisał(a):

Originally posted by yakuna:

Jakie jest jego zadanie


Najprawdopodobniej odpowiada za ogólny wygląd PPM Zablokuj zawartość