Resumo: Este artigo discute como implementar várias janelas pop-up usando CodeBehind em ASP.NET e interagir com janelas pop-up. Ele também discute os vários comportamentos de filtragem de navegadores IE não padrão comumente usados para janelas pop-up e as contramedidas correspondentes para o uso de janelas pop-up, a fim de fornecer uma solução universal e melhor para o uso de janelas pop-up.
Palavras-chave: ASP.NET, CodeBehind, filtragem, interface COM, JavaScript, vinculação
Como a ferramenta mais recente da Microsoft para construção de sites dinâmicos, o ASP.NET fez grandes progressos na mudança do método de programação da Web original em comparação com ASP e JSP. Sua tecnologia de separação de código e página (CodeBehind) e controles completos de servidor Web fornecem aos programadores um método de desenvolvimento do lado do servidor Web que está mais alinhado com a programação tradicional. Porém, a programação Web ainda possui características diferentes da programação tradicional. Essas características determinam que algumas técnicas especiais devem ser utilizadas na programação ASP.NET para completar os requisitos do programa. Muitos livros de programação não falam sobre janelas pop-up ou apenas as mencionam em uma palavra, parecendo não entender o enorme mundo do uso de janelas pop-up. Este artigo resolverá a maioria dos problemas de uso de janelas pop-up para você.
Para melhorar a simultaneidade e o rendimento do acesso ao site, o ASP.NET, como outros scripts de servidor, também usa scripts do lado do cliente para reduzir a pressão no servidor. O ASP.NET não oferece suporte direto a janelas pop-up até agora (versão 1.1), e as janelas pop-up do lado do cliente devem ser usadas por meio de JavaScript (ou VBScript).
1. Janela de aviso e o método de uso do script do lado do cliente no CodeBehind
Para abrir a janela de aviso mais simples no navegador, você pode usar a instrução JavaScript:
window.alert([sMessage])
onde sMessage é a mensagem de prompt. Infelizmente, essa janela pop-up possui apenas um botão “OK” e só pode servir como um prompt. Se quisermos abrir uma janela pop-up de consulta ao excluir um registro, você precisa usar:
bConfirmed = window.confirm([sMessage])
onde: bConfirmed é o valor de retorno e sMessage é a mensagem de prompt. Esta janela pop-up possui duas opções: “OK” ou “Desistir”, e o valor de retorno de sua escolha é colocado em bConfirmed para que o código faça um julgamento.
A fim de melhorar a reutilização e legibilidade do código, JavaScript e Codehind devem ser integrados entre si. Geralmente existem duas maneiras de obter esse efeito.
(1) Use o método Response.Write:
O uso do método Response.Write tem suporte desde a era ASP. Ele pode escrever código para o cliente, o que é um método muito conveniente e intuitivo. O código a seguir demonstra como usar o método Response.Write para exibir uma mensagem de aviso.
Private Sub btAlert_Click (ByVal sender As System.Object, ByVal e As System.EventArgs) Lida com btAlert.Click
'Demonstra o método Response.Write e a janela de alerta.
Resposta.Write(" ")
End Sub
(2) Use o método RegisterXXX
Se você observar o código HTML gerado por Response.Write, verá que o código gerado pelo método Response.Write é gravado bem no início do código HTML, ou seja, antes. a etiqueta. Neste momento, todos os objetos HTML ainda não foram gerados. Se você quiser usar e interagir com objetos em HTML, ocorrerá um erro de "objeto não encontrado". Portanto, o autor recomenda um método mais alinhado com o método CodeBehind - usando o método RegisterXXX. RegisterXXX inclui: RegisterClientScriptBlock, RegisterStartupScript e a função IsStartupScriptRegistered para julgamento.
O protótipo do RegisterStartupScript é:
Overridable Public Sub RegisterStartupScript( _
Chave ByVal como String, _
Script ByVal como String _
)
onde: key representa o identificador exclusivo deste script e script é uma string que representa o script.
O protótipo de RegisterClientScriptBlock é o mesmo de RegisterStartupScript. A diferença entre as duas funções é que o código de script que elas contêm é gravado em locais diferentes no arquivo HTML. RegisterClientScriptBlock emite o script do cliente imediatamente após a tag de abertura do elemento do objeto Page, e RegisterStartupScript emite o script antes da tag de fechamento do elemento do objeto Page. Se o seu script possui instruções que interagem com o objeto de página (objeto de documento) (isso será visto em nossos exemplos posteriores), é recomendado usar RegisterStartupScript. Por outro lado, se você deseja que o script do cliente seja executado o mais cedo possível. possível, você pode usar RegisterClientScriptBlock ou Response.Write.
Para evitar a adição repetida de scripts à página, ReisterStartupScript/RegisterClientScriptBlock usa key como chave de registro ao registrar o script e, em seguida, IsClientScriptBlockRegistered pode ser usado para fazer julgamentos no programa.
O exemplo a seguir usará RegisterClientScriptBlock para demonstrar o uso de confirm.
Private Sub btConfirm_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Trata btConfirm.Click
'Demonstrar o método RegisterClientScriptBlock e confirmar windowIf
(Not IsClientScriptBlockRegistered("clientScript")) Then
'Determine se o script foi adicionado, caso contrário, adicione-o.
Dim strScript como string
strScript = " "
'Registrar scriptRegisterClientScriptBlock("clientScript", strScript)
'Se você selecionar "Não", continue a execução.
End If
End Sub
2. Abrir a página especificada
Apenas ter uma janela de prompt está longe de atender aos nossos requisitos. No programa, muitas vezes precisamos abrir a página especificada. Neste momento, você pode usar o método window.open do JavaScript. Com o método RegisterClientSciptBlock anterior, podemos abrir a página especificada.
O código a seguir mostra como abrir a página especificada:
Private Sub btWinOpen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btWinOpen.Click
'Use window.open e RegisterStartupScript para uma demonstração simples.
Se (Not IsClientScriptBlockRegistered("OpenScript")) Então
'Determine se o script foi adicionado, caso contrário, adicione-o.
Dim strScript As String = " "
RegisterStartupScript("OpenScript", strScript)
Terminar se
End Sub
usa o método Window.open para abrir uma nova página, que possui apenas um parâmetro: o endereço URL da nova janela pop-up. Acontece que o método window.open possui vários parâmetros, mas isso é uma simples questão de javascipt e não entraremos em detalhes aqui. Se você tiver dúvidas relacionadas, verifique o MSDN.
Este programa funciona bem quando usado diretamente no IE. Mas se você estiver usando navegadores como GoSurf, MyIE2, NetCapter, etc., infelizmente! Você não verá pop-ups. Isso é o que discutiremos sobre filtragem de pop-up.
3. Discuta o comportamento de filtragem de janelas pop-up de navegadores IE não padrão
A proliferação de janelas de publicidade tornou insuportável que muitos internautas fossem assediados por anúncios. Eles desistiram de navegadores IE padrão e usaram navegadores como GoSurf, MyIE2,. e NetCapter que usa o kernel do IE para suportar múltiplas páginas e software que bloqueia anúncios automaticamente. Diz-se que no próximo IE6 sp2, a Microsoft também adicionará a função de bloquear janelas de publicidade. É claro que isso é bom para a maioria dos usuários da Internet, mas para os programadores, a maneira como usamos as janelas pop-up não é fundamentalmente diferente dos anúncios comuns. Essas janelas também serão bloqueadas indiscriminadamente pelo gerenciador de janelas pop-up. claro que não queremos ver isso. Existe uma maneira padrão de fazer a janela aparecer normalmente? Isso exige que compreendamos o princípio do bloqueio de publicidade do navegador. Os bloqueadores de anúncios comuns usam os três métodos a seguir para filtrar anúncios:
(1) Método de bloqueio baseado em títulos de janelas
O princípio deste método de bloqueio é verificar regularmente todos os títulos de janelas do IE e, em seguida, filtrá-los com base na lista existente (mantida pelo IE)
.programa). Uma lista de array) para comparar, se houver o mesmo, fechamos esta janela. Obviamente, este método tem muitas falhas. Ele bloqueia todas as janelas pop-up e é muito rígido. Raramente é usado no programa. No entanto, o método de deformação baseado nele é bastante comum. Ou seja, a tecnologia de filtragem inteligente baseada no nome do título da janela bloqueia janelas pop-up com base no fato de o título conter palavras-chave relacionadas à publicidade. Esta é uma boa exploração para melhorar o efeito de filtragem.
(2) Método de bloqueio baseado na classe e localização da janela
Após análise, descobriu-se que os nomes das classes das janelas de navegação normais são IEFRAME e CabinetWClass, enquanto o nome da classe das janelas de publicidade é CabinetWClass. Uma análise mais aprofundada descobriu que: os valores de rect.top da classe WorkerA da janela de publicidade e da classe Shell DocObject View são os mesmos, mas os valores de rect.top da classe WorkerA da janela normal do IE e a classe Shell DocObject View são diferentes. Com base nos dois pontos acima, você pode escrever um programa matador de publicidade. Na verdade, sou cético quanto à generalização deste programa. Porque o autor usou o Spy++ para analisar e descobriu que no Windows2000 (o sistema operacional usado pelo autor), as classes das janelas do IE são todas IEFrame. Ao mesmo tempo, como o Win2000 é um sistema operacional baseado em código Unicode, não existe a classe WorkerA e é substituída pela classe WorkerW. Ao mesmo tempo, não há situação em que rect.top seja diferente. Como o autor não possui um sistema operacional WindowsXP, não posso realizar mais experimentos no WindowsXP.
(3) Métodos de bloqueio baseados em componentes COM do IE
Os dois métodos acima tratam a janela do IE como uma janela comum do Windows e fazem julgamentos. Na verdade, o IE é um navegador típico baseado em componentes COM. Todos os navegadores baseados no núcleo do IE empacotam o arquivo shdocvw.dll e, em seguida, escrevem o código BHO correspondente. Somente desta forma podemos realmente controlar o navegador IE, em vez de arranhar a superfície como os métodos um e dois.
Também existe um método de bloqueio de janela pop-up baseado no kernel do IE. Ele bloqueia pop-ups antes que eles abram. O princípio é: Sempre que o IE abrir uma nova janela, o evento NewWindow será acionado e o método OnNewWindow2([out] IDispatch*, [out] BOOL *bCancel) será executado. Sobrecarregue esse método para determinar se o evento de abertura de nova janela ocorre após o download da página de navegação. Se for, significa que é uma janela pop-up normal, caso contrário será interceptada.
Como navegadores como o Gosurf sobrecarregam o componente Shocvm.dll, é natural usar o terceiro método. No entanto, durante o uso, às vezes descobrimos que a filtragem de anúncios não é perfeita, mas o princípio é basicamente o mesmo.