2017-01-06 27 views
0
Rails 3.2 

私はZendeskウィジェットを私のRailsアプリケーションに埋め込みたいと思っています。命令は、コードを埋め込むことをヘッドセクションの終わりと呼ぶ。ZendeskウィジェットをRailsアプリケーションに組み込む

ここではスクリプトです:

<!-- Start of Zendesk Widget script --> 
<script>/*<![CDATA[*/window.zEmbed||function(e,t){var n,o,d,i,s,a=[],r=document.createElement("iframe");window.zEmbed=function(){a.push(arguments)},window.zE=window.zE||window.zEmbed,r.src="javascript:false",r.title="",r.role="presentation",(r.frameElement||r).style.cssText="display: none",d=document.getElementsByTagName("script"),d=d[d.length-1],d.parentNode.insertBefore(r,d),i=r.contentWindow,s=i.document;try{o=s}catch(e){n=document.domain,r.src='javascript:var d=document.open();d.domain="'+n+'";void(0);',o=s}o.open()._l=function(){var o=this.createElement("script");n&&(this.domain=n),o.id="js-iframe-async",o.src=e,this.t=+new Date,this.zendeskHost=t,this.zEQueue=a,this.body.appendChild(o)},o.write('<body onload="document._l();">'),o.close()}("https://assets.zendesk.com/embeddable_framework/main.js","xxx.zendesk.com"); 
/*]]>*/</script> 
<!-- End of Zendesk Widget script --> 

私は、ので、ここでビュー/レイアウト/ application.html.slim

doctype html 
html lang="en" 
    head 
    meta charset="utf-8" 
    meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1" 
    meta name="viewport" content="width=device-width, initial-scale=1.0" 
    - if Rails.env.production? 
     = javascript_include_tag "analytics.js" 
     title= content_for?(:title) ? yield(:title) : t('layout.site_name') 
    - else 
     title= request.path.gsub('/', ' ').humanize 
    = csrf_meta_tags 
    /! Le HTML5 shim, for IE6-8 support of HTML elements 
    /[if lt IE 9] 
     = javascript_include_tag "//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.6.1/html5shiv.js" 
    = stylesheet_link_tag "//netdna.bootstrapcdn.com/bootstrap/3.0.2/css/bootstrap.min.css", "application" 
    = stylesheet_link_tag controller.controller_name if Installio::Application.assets.find_asset("#{controller.controller_name}.css") 
    = javascript_include_tag "application", "//netdna.bootstrapcdn.com/bootstrap/3.0.2/js/bootstrap.min.js" 
    = javascript_include_tag controller.controller_name if Installio::Application.assets.find_asset("#{controller.controller_name}.js") 
    = yield :css 
    = yield :javascript 

    link href="images/apple-touch-icon-144x144.png" rel="apple-touch-icon-precomposed" sizes="144x144" 
    link href="images/apple-touch-icon-114x114.png" rel="apple-touch-icon-precomposed" sizes="114x114" 
    link href="images/apple-touch-icon-72x72.png" rel="apple-touch-icon-precomposed" sizes="72x72" 
    link href="images/apple-touch-icon.png"   rel="apple-touch-icon-precomposed" 
    link href="/favicon.ico"      rel="shortcut icon" 
    javascript: 
     <!-- Start of Zendesk Widget script --> 
     <script>/*<![CDATA[*/window.zEmbed||function(e,t){var n,o,d,i,s,a=[],r=document.createElement("iframe");window.zEmbed=function(){a.push(arguments)},window.zE=window.zE||window.zEmbed,r.src="javascript:false",r.title="",r.role="presentation",(r.frameElement||r).style.cssText="display: none",d=document.getElementsByTagName("script"),d=d[d.length-1],d.parentNode.insertBefore(r,d),i=r.contentWindow,s=i.document;try{o=s}catch(e){n=document.domain,r.src='javascript:var d=document.open();d.domain="'+n+'";void(0);',o=s}o.open()._l=function(){var o=this.createElement("script");n&&(this.domain=n),o.id="js-iframe-async",o.src=e,this.t=+new Date,this.zendeskHost=t,this.zEQueue=a,this.body.appendChild(o)},o.write('<body onload="document._l();">'),o.close()}("https://assets.zendesk.com/embeddable_framework/main.js","xxx.zendesk.com"); 
     /*]]>*/</script> 
     <!-- End of Zendesk Widget script --> 
    body 

JavaScriptで私がやったことだ、.slim使用しています作成することになっています右下にアイコンが表示されます。

私はページのHTMLソースコードを見てみると、ここで私が得るものです:

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
     <meta charset="utf-8" /> 
     <meta content="IE=Edge,chrome=1" http-equiv="X-UA-Compatible" /> 
     <meta content="width=device-width, initial-scale=1.0" name="viewport" /> 
     <title> companies tickets</title> 
     <meta content="authenticity_token" name="csrf-param" /> 
     <meta content="8SQUtDCkI0m2DEt+PmGETO4F8hqD60oXLWzOvkm395A=" name="csrf-token" /> 
     <!--Le HTML5 shim, for IE6-8 support of HTML elements--><!--[if lt IE 9]><script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.6.1/html5shiv.js" type="text/javascript"></script><![endif]--> 
     <link href="//netdna.bootstrapcdn.com/bootstrap/3.0.2/css/bootstrap.min.css" media="screen" rel="stylesheet" type="text/css" /> 
     <link href="/assets/application-92740c7868cf6da1a36b8824c3467f05.css" media="screen" rel="stylesheet" type="text/css" /> 
     <script src="/assets/application-4c835f73bc6c75e164ae8fa087f33966.js" type="text/javascript"></script> 
     <script src="//netdna.bootstrapcdn.com/bootstrap/3.0.2/js/bootstrap.min.js" type="text/javascript"></script><script src="/assets/tickets-0f5809fe7de8a6d1415fbbadf7d24e17.js" type="text/javascript"></script><script src="/assets/price_calculation-61272aba476e0c62104eac34b8ee22b1.js" type="text/javascript"></script><script src="/assets/ajax-table-d6d79fff4bfee3f320d115150c8bd3ca.js" type="text/javascript"></script><script src="/assets/context-form-a8ccf9d4d39039858ccb4950aa97dac5.js" type="text/javascript"></script> 
     <link href="images/apple-touch-icon-144x144.png" rel="apple-touch-icon-precomposed" sizes="144x144" /> 
     <link href="images/apple-touch-icon-114x114.png" rel="apple-touch-icon-precomposed" sizes="114x114" /> 
     <link href="images/apple-touch-icon-72x72.png" rel="apple-touch-icon-precomposed" sizes="72x72" /> 
     <link href="images/apple-touch-icon.png" rel="apple-touch-icon-precomposed" /> 
     <link href="/favicon.ico" rel="shortcut icon" /> 
     <script type="text/javascript"><!-- Start of Zendesk Widget script --> 
     <script>/*<![CDATA[*/window.zEmbed||function(e,t){var n,o,d,i,s,a=[],r=document.createElement("iframe");window.zEmbed=function(){a.push(arguments)},window.zE=window.zE||window.zEmbed,r.src="javascript:false",r.title="",r.role="presentation",(r.frameElement||r).style.cssText="display: none",d=document.getElementsByTagName("script"),d=d[d.length-1],d.parentNode.insertBefore(r,d),i=r.contentWindow,s=i.document;try{o=s}catch(e){n=document.domain,r.src='javascript:var d=document.open();d.domain="'+n+'";void(0);',o=s}o.open()._l=function(){var o=this.createElement("script");n&&(this.domain=n),o.id="js-iframe-async",o.src=e,this.t=+new Date,this.zendeskHost=t,this.zEQueue=a,this.body.appendChild(o)},o.write('<body onload="document._l();">'),o.close()}("https://assets.zendesk.com/embeddable_framework/main.js","xxx.zendesk.com"); 
     /*]]>*/ 
     </script> 
     <!-- End of Zendesk Widget script --></script> 
    </head> 
    <body> 
     .................... 
    </body> 
</html> 

は、私は、ページの右下にZendeskのアイコンを見て、しかし、ないです。何か案は?

答えて

1

問題はおそらく<script>タグが2回レンダリングされることに関連していますか?しかし、私はこのスクリプトを私のRailsアプリケーションの前にインストールしました。ここで私がよりクリーンなソリューションを得たのです:

1)Zendeskスクリプト用の新しいJSファイルを作成します。あなたのテンプレートに。私は通常この種のスクリプトをvendor/assets/javascripts/に入れます。だから、vendor/assets/javascripts/zendesk.jsのようなものになるはずです。 config/initializers/assets.rbに次の行を追加し、このファイルをプリコンパイルするように指示Railsの)あなたが/*<![CDATA

2から始まるこのファイルに<script>タグ、ちょうどJSコードを含めるべきではないことに注意してください:Rails.application.config.assets.precompile += %w(zendesk.js)

3)アプリケーションのレイアウトの追加= javascript_include_tag 'zendesk'

これが正常に動作している場合は、ローカル環境の要求が遅くなる可能性があるため、開発環境用のスクリプトを含めたくない場合があります。 analics.js

+0

素晴らしいと思います。出来た。私はよくJavascriptに精通していません(私は主にAPIとバックエンドのものを扱います)が、私はJavaScriptの深みを得る時間だと思います – EastsideDeveloper

関連する問題