3

バックストーリー: SendGridの Newsletter Widget を使用しようとしていますが、現在 SSL を使用して提供していません。したがって、https:// へのリクエストはすべて http:// にリダイレクトされるだけで、ブラウザは安全なサイトの安全でないコンテンツについて不平を言います。

わかりましたので、PHP で次のようなものを実装します。

$output = file_get_contents('http://sendgrid.com/newsletter/getSubscriptionWidget?p=xxx');

そして、私の見解では、これがあります:

 <script type="text/javascript">
    <?php echo($output); ?>
 </script>

実行後にこのページのソースを表示すると、javascript ウィジェット コードが適切にプルされていることがわかります。しかし、うまくいきません。「機能しない」とは、javascript コードが実行されないことを意味します。

次のようなスクリプトタグを使用して(https以外の開発環境で)ロードした場合:

<script type="text/javascript" src="http://sendgrid.com/newsletter/getSubscriptionWidget?p=xxx">

その後、それはうまくいきます!

TL;DR; script要素のsrc属性の下に読み込まれたときに javascript が正常に実行され、scriptタグ内のコンテンツとしてエコーされたときに機能しない原因は何ですか?

PSここでSendGrid ウィジェットのソースを表示できます。

4

1 に答える 1

1

解決した

これを使用して、スクリプト タグがスクリプトを指していることを確認するために、SendGrid コード チェックを行います。

// replace each instance
$('script').each(function (wIdx, wElem) {
var tag, src, table, trSubmit, tdSubmit, form, emailInput, message, params;

tag = $(this);
src = tag.attr('src');
params = RegExp('p=' + '(.+?)(&|$)').exec(src);
// check if corret script
if ($.isArray(params) && params.length > 1 && key === params[1]) {
  form = $('<form />', {
    'class': 'SG_widget_form',
    'method': 'POST',
    'action': postURL,
    'accept-charset': 'UTF-8'
  });
  form.insertBefore(tag);
  tag.remove();
  message = $('<span />').insertBefore(form).hide();

・・・この後も続きますが、そこが肝心です。タグにsrc属性を追加して正しい場所を指すことにより、ブラウザーは通常の読み込みをブロックしますが、PHP でエコーしたコードをその内部で実行します。

おそらく私の問題にかなり固有のものですが、うまくいけば他の人の助けになるでしょう。

于 2013-05-17T20:49:55.350 に答える