none
Baseado em code-behind como colocar + de 1 linha de função javascript?

    Question

  • 'Esta é uma função simples em java script para target

    frame de pagina que foi me orientado e repassado p/ code-behind

     

    Pequena Rotina em JavaScript em code-behind
            'Dim strtarget As String
            'strtarget = "top.location='../produtos/obrigadocadastrarcategorias.asp?categoria=" & (Categoria) & "'"
            'Response.Write(strtarget)
            'Me.ClientScript.RegisterClientScriptBlock(Me.GetType(), "Target", strtarget, True)

     

     

    No caso agora como eu poderia escrever uma função de java-script em code-behind com mais de uma linha

     

    por ex.

     

    <script language="JavaScript">
    <!--

    function copyright() {
    alert('nomeempresa - Copyright © 2005 - Todos os Direitos Reservados!!!');
    }
    document.onkeydown=keypresed;
    // -->

     

     

    Fico no aguardo?

    Wednesday, April 25, 2007 2:36 AM

All replies

  •  

    Do mesmo jeito, mas o ideal é usar StringBuilder ....

     

    Veja abaixo seu exemplo:

     

     

    Code Snippet

    Dim strtarget As System.Text.StringBuilder = New System.Text.StringBuilder()

    strtarget.Append("<!-- \n\r")

    strtarget.Append(" function copyright() { \n\r")

    strtarget.Append(" alert(\"nomeempresa - Copyright (c) 2005 - Todos os Direitos Reservados!!!\"); \n\r")

    strtarget.Append(" } \n\r")

    strtarget.Append(" document.onkeydown=keypresed; \n\r ")

    strtarget.Append(" // --> ")

     

    Me.ClientScript.RegisterClientScriptBlock(Me.GetType(), "Target", strtarget.ToString(), True)

     

     Alguns detalhes:

     

    Me.ClientScript.RegisterClientScriptBlock(Me.GetType(), "Target", strtarget.ToString(), True)

     

    O True acima informa se o método deve adicionar automaticamente as tags de script: <script.......></script>

     

    Então não precisa escrever essas linhas no código...

     

    O \n\r  servem para dar a quebra de linha no código para que quando renderizado, fique da forma que escreveu acima, caso contrário ficará tudo numa linha só, tipo:

     

     

    <!-- function copyright() { alert('nomeempresa - Copyright © 2005 - Todos os Direitos Reservados!!!');  ................

     

     

     

     

    Espero ter ajudado!

     

     

     

     

     

    Wednesday, April 25, 2007 2:51 AM
  • Fui testar em local host mas não funcionou o script seria uma especie de proteção de direitos autorais to mandando o codigo completo

     

     

    <script language="JavaScript">
    <!--

    function keypresed() {
    alert('nomedaempresa - Copyright © 2005 - Todos os Direitos Reservados!!!');
    }
    document.onkeydown=keypresed;
    // -->
    </script>
     <script language="JavaScript1.3">
    if (window.Event)
    document.captureEvents(Event.MOUSEUP);
    function nocontextmenu()
    {
    event.cancelBubble = true
    event.returnValue = false;
    return false;
    }
    function norightclick(e)
    {
    if (window.Event)
    {
    if (e.which == 2 || e.which == 3)
    alert("nomedaempresa - Copyright © 2005 - Todos os Direitos Reservados!!!");
    return false;
    }
    else
    if (event.button == 2 || event.button == 3)
    {
    event.cancelBubble = true
    event.returnValue = false;
    alert("nomedaempresa - Copyright © 2005 - Todos os Direitos Reservados!!!");
    return false;
    }

    }
    if (document.layers) {
    document.captureEvents(Event.MOUSEDOWN);
    }
    document.oncontextmenu = nocontextmenu;
    document.onmousedown = norightclick;
    document.onmouseup = norightclick;

    function disableselect(e){
    return false
    }
    function reEnable(){
    return true
    }
    document.onselectstart=new Function ("return false")
    if (window.sidebar){
    document.onmousedown=disableselect
    document.onclick=reEnable
    }
    //-->

    </script>
    <script language="JavaScript">
    <!--

    function SymError()
    {
      return true;
    }

    window.onerror = SymError;

    //-->
    </script>

     

    pq fui testar em local host só a parte de cima do código em Asp.NET - Ajax-Enabled WebApplication Project e não funcionou como funcionava antes no html basico fico no aguardo

    Wednesday, April 25, 2007 3:37 AM
  • Oi !

     

    Coloque a função já pronta no HTML da página, ao invés de monta-la por código.

     

    Se existe um objeto/evento no qual deseja disparar a função, faça o seguinte :

     

     

    Code Snippet
    objeto.attributes.add("evento","BLOCKED SCRIPTsuafuncao();");

     

     

     Eu, particularmente, detesto este tipo de "proteção dos direitos autorais", porque :

     

    1) Não protege nada. Quem quiser o fonte pega, no cache do browser ou através de truques com o link e um save target

     

    2) Não tem nada para proteger. Seu fonte a proteger é o código de servidor, que seu usuário não vê.

     

    3) Atrapalha completamente a usabilidade :

     

    A) Não se consegue dar um back com o botão direito

    B) Não se consegue fazer um open in new window/open in new tab com o botão direito

    C) Se o texto é longo, as vezes leio selecionando, assim como alguns ficam em reuniões rabiscando, um popup só atrapalha

     

    4) Está tapeando o cliente que pensa que isso protege ele. Vide item 1 lá em cima

     

    []'s

     

     

     

    Wednesday, April 25, 2007 10:47 AM
  • Dennes então o que vc sugeriria como opção para qdo for clicado o botão direito do mouse ou o clique de uma tecla p/ melhorar isso do lado do servidor ou do lado do servidor não tem como fazê-lo

     

    e do jeito que vc me falou vc teria como me montar um exemplo na pratica como eu poderia utilizar a função javascript que eu passei ácima no code-behind ou pelo code-behind não tem jeito mesmo?

     

     

    Wednesday, April 25, 2007 12:22 PM
  •  

    1) Melhorar o que do lado do servidor ? O clique não acontece do lado do servidor, acontece do lado client, então o código para controlar isso tem que estar no client. A única coisa que o lado do servidor pode fazer se necessário é gerar este código, mas para que, se o código pode já ser deixado pronto no HTML ?

     

    2) Sua função está fazendo tratamento de teclas. Se fosse uma função comum, qualquer, com um alert, seria por exemplo fazer image1.attributes.add("onclick","javascriptTongue Tieduafuncao()") . Mas para sua função, que faz tratamento de teclas, não sei se você deseja coloca-la em um objeto específico ou a nível de document, o que talvez leve a conclusão que você nem ao menos precisaria ter a chamada dela no code-behind, bastando colocar a chamada dela no javascript.

     

    3) Por que esse desejo de colocar tudo isso no code-behind ?

     

    []'s

     

    Wednesday, April 25, 2007 1:16 PM
  • 1) Melhorar o que do lado do servidor ?

     

        Ok, é que como sou iniciante em .net e pelo menos p/ algumas aplicações incluindo imagens

        vou têr que simular o que fazia em aspclassico e até então não sabia como colocar isso no

        html formado pelo asp.net já que estou acostumado com o aspclassico mas se for a mesma coisa   já entendi

     

       É que o meu objetivo era ter o mesmo codigo, mesmo sendo cliente funcionando em varios navegadores de forma igual ao comportamento dele no Internet Explorer, por isso que eu perguntei se haveria alguma maneira do lado do servidor, já que o comportamento dele em outros navegadores, leia-se :Firefox e Netscape (é completamente liberado do lado do cliente ou seja

    não protege inteiramente um dado de imagem)    

     

    O clique não acontece do lado do servidor, acontece do lado client, então o código para controlar isso tem que estar no client. A única coisa que o lado do servidor pode fazer se necessário é gerar este código, mas para que, se o código pode já ser deixado pronto no HTML ?

     

    No caso aí seria não sei se dá pra fz isso gerar de uma forma que o codigo fique numa dll p/ não ser visto no HTML

     

     

     

    2) Sua função está fazendo tratamento de teclas. Se fosse uma função comum, qualquer, com um alert, seria por exemplo fazer image1.attributes.add("onclick","javascriptuafuncao()") . Mas para sua função, que faz tratamento de teclas, não sei se você deseja coloca-la em um objeto específico ou a nível de document, o que talvez leve a conclusão que você nem ao menos precisaria ter a chamada dela no code-behind, bastando colocar a chamada dela no javascript.

     

    Seria para duas coisas - no caso o ex. que vc. me passou seria algo assim

     

    image1 (seria um objeto do tipo image e isso tb valeria p/ um objeto do tipo hyperlink com imagem?)

     

    e esse código que vc me passou seria colocado no source e não no code-behind?

     

    image1.attributes.add("onclick","javascriptuafuncao()") 

     

    no caso a função que é criada para esse source em java-script em que parte do source teria que sêr colocada já que não existem mais as tags <head></head> onde anteriormente as funções em java-script e styles eram colocadas?

     

    3) Por que esse desejo de colocar tudo isso no code-behind ?

     

      O desejo seria alem da possibilidade de protegê-lo via dll (se possivel não sei) tb. a possibilidade caso o code-behind como o ajax controls tool kits, fáz sêr lido da mesma forma em varios navegadores, mantendo sempre a mesma operação de proteção conforme o ex. em java script que passei acima

     

    []'s

     

    bem fico no aguardo, caso hj alguma solução ou algum link ou artigo de preferencia em portugues se possivel ou exemplo que possa me auxiliar mais nesta tarefa já que sou iniciante em .net2.0

     

    de qq. maneira fico desde já mais uma vêz grato pela ajuda

    Wednesday, April 25, 2007 1:44 PM
  • Bom dia,

     

    Se você quer tornar seu script reuntilizável a melhor maneira de fazer isso é criando uma classe útil na qual você chama um método estático que registra isso na função...

     

    Ou melhor, crie uma classe e herde o Tipo Page e sobrescreva o método Page_Init por exemplo e nela registre esse script, e todas as suas páginas você herda dessa sua classe herdada da Page...

     

    Ai não precisará se preocupar com o registro dessa sua função para cada página...

     

     

     

    Outra coisa, não creia que seja interessante esconder esse código JavaScript, já que o mesm pode ser encontrado em diversos sites por ai, é um script comum...

    E só protege superfialmente, eu sinceramente não aconselho usar esse tipo de script, mas você deve ter seus motivos.

     

    Para "tentar" ocular o código JavaScript você pode utilizar WebResources, coloque seu código em um arquivo do tipo "JScript", salve e Crie um Arquivo do tipo Resource, arraste pra dentro do mesmo, agora seu Embbed Resource estará pronto para uso, ai você poderá compartilhar esse objeto depois você pode utilizar a expressão:

     

     

    Code Snippet
    this
    .Page.ClientScript.GetWebResourceUrl(this.GetType(), "nomeDaSuaNameSpace.NomeDaSuaClasseQueTemORecurso.NomeDoRecurso.extensao");

     

     

     

    Com a linha a cima você recupera a url e dispõe desse recurso para ser acessado pela Web.

     

     

    Depos basta fazer um:

     

    Code Snippet
    this
    .Page.ClientScript.RegisterClientScriptInclude(................

     

     

     

     

     

    Pronto, se encapsular isso em um Web Control Library ou uma Classe Herdada da classe Page, não terá dificuldades e padronizará o uso do recurso assim como facilitará na manutenção do código.

     

    Lembrando que dessa forma que conhece ainda conseguirá ver seu código, mas não ficará tão simples e inserido direto como de costume...

    mas que conhece sabe ver esse arquivo e esse código por um navegador...

     

     

    Espero ter ajudado!

    Wednesday, April 25, 2007 2:06 PM
  •  

    Oi !

     

    Você já descreveu em outros posts o cenário de proteção que deseja. Esse cenário é absolutamente impossível. Você não protege HTML e imagens contra o usuário final, o HTML e as imagens estarão na máquina do usuário final. Você no máximo dificulta um pouco, a custo de usabilidade, mas quem quiser pegar, pega.

     

    Você protege o seu código do servidor, isso você protege, mas o HTML gerado pelo código do servidor não tem como ser protegido.

     

    "No caso aí seria não sei se dá pra fz isso gerar de uma forma que o codigo fique numa dll p/ não ser visto no HTML"

     

    O ASP.NET tem opções de compilar todo o HTML para arquivos .DLL, mas isso não foi feito para proteger contra o usuário final, isso tem outra finalidade. Mesmo com o HTML todo em uma DLL ainda assim o usuário final vai ter acesso ao HTML, então é melhor nem ir atrás deste recurso, pois não vai chegar neste objetivo de proteção que você deseja.

     

     

    "no caso a função que é criada para esse source em java-script em que parte do source teria que sêr colocada já que não existem mais as tags onde anteriormente as funções em java-script e styles eram colocadas?"

    As tags e continuam no mesmo lugar que ficavam antes, então simplesmente não entendi o que você quis dizer.

     

    Este exemplo :

     

    Code Snippet
    image1.attributes.add("onclick","javascriptuafuncao()") 

     

     

     

    É para o code-behind, pode ser usado com qualquer objeto. Mas no exemplo da sua função o evento não seria onclick e além disso, haveria um objeto ou seria no document ? Se for a nível de document, então entra tudo no HTML

     

    O ASP.NET possui uma metodologia extremamente ampla para garantir que os recursos client de seus webcontrols funcionem de forma identica em todos os browsers, porém isso de forma alguma vai leva-lo ao nível de proteção contra o usuário final que você deseja, então é melhor também não seguir este caminho.

     

    []'s

     

     

    Wednesday, April 25, 2007 2:19 PM
  • Oi !

     

    Só para não confundir mais o Luiz, gostaria de destacar o seguinte : A "proteção" do javascript oferecida pelo webResource tem outro tipo de objetivo, não é uma proteção contra o usuário final e nem ao menos seria "proteção".

     

    Se o usuário final quiser o javascript, vai pegar e nada vai impedi-lo.

     

    []'s

     

    Wednesday, April 25, 2007 2:25 PM
  • Em relação ao code behind que vc me passou o do atributo vc teria como me passar um exemplo de como coloco a minha função no code behind para o mesmo sêr reconhecida no objeto ou no form no caso

     

    como eu coloco "javascriptuafuncao" baseado no meu javascript ácima no codebehind teria como me passar um exemplo

     

     

    image1.attributes.add("onclick","javascriptuafuncao()")

     

    (se puder tb me dar um ex. da linha ácima para o form.aspx td tb agradeço

     

    Em relação ao que vc me disse que realmente mesmo que eu coloque essa proteção usual no code-behind o html será mostrado ou seja o caminho da imagem, é isso seria mostrado  mas via solicitação ao meu provedor de serviços eu não poderia proibir via http:// o acesso á esta pasta onde estariam as imagens e fazendo isso mesmo assim eu poderia uploadar através de um sistema de upload as imagens para esta pasta protegida?

     

    Fico no aguardo do codigo da função e veja se essa solução usual me ajudaria?

    Wednesday, April 25, 2007 5:10 PM
  • Entrei no suporte da LOCAWEB e elês tem um componente p/ asp classico assim que eu aprender ou se alguem pd me dar uma dica de como programá-lo que executa, segundo o atendente que me atendeu no suporte a seguinte situação

     

    Perguntei ao atendente se:

     

    A mesma subpasta por ex. imagens, se poderia sêr protegida contra cópia de imagens via navegação, mesmo se o usuário soubesse o link

     

    Aí ele me disponibilizou este link deste componente para aspclassico, que faria isso ou algo parecido

     

    o nome do componente se chama ISAPrewriter

     

    http://site.locaweb.com.br/suporte/faq/faq.asp?CodigoCategoria=4806&faq=1260

     

    alguem saberia como usar esse componente ou um codigo de ex. já que é aspclassico e não .net2.0  e se seria possivel adaptar a usabilidade dele, via lógica de programação para se criar um contrôle ou algo parecido via .net2.0?

     

     

    e aproveitando perguntei ao mesmo atendente se mesmo essa subpasta ficando protegida se seria mesmo assim fz upload nela e ele me disse que sim?

    Wednesday, April 25, 2007 6:13 PM