-1

私のサイトで地図をレンダリングするために、次のコードを確立しました。いずれかの地域で地図をクリックすると、情報ウィンドウがポップアップ表示され、ハイパーリンクを含むコンテンツが表示され、フォームを含むWebサイトが開きます。fancyboxを利用して、このリンク「フォーム」をオーバーレイで開きたいと思います。Fancybox(バージョン1.3.4)を動作させることに失敗しましたが、iframe内からの関数の呼び出しをサポートしていないことを読みました。これが問題であるかどうか、そしてfancybox(または別のオーバーレイオプション)を利用する別の方法があるかどうか疑問に思いましたか?たぶん、イベントリスナーまたはコールバック-どんなヒントでも大歓迎です!

<style>
    #map-canvas { width:850px; height:600px; }
</style>

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true"></script>

<script src="http://gmaps-utility-gis.googlecode.com/svn/trunk/fusiontips/src/fusiontips.js" type="text/javascript"></script>

<script type="text/javascript">
    var map;
        var tableid = "1nDFsxuYxr54viD_fuH7fGm1QRZRdcxFKbSwwRjk";
    var layer;
    var initialLocation;
    var browserSupportFlag =  new Boolean();
    var uscenter = new google.maps.LatLng(37.6970, -91.8096);

    function initialize() {
        map = new google.maps.Map(document.getElementById('map-canvas'), {
            zoom: 4,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        });
        layer = new google.maps.FusionTablesLayer({
            query: {
                select: "'Geometry'",
                from: tableid
            },
            map: map
        });

                //http://gmaps-utility-gis.googlecode.com/svn/trunk/fusiontips/docs/reference.html
                layer.enableMapTips({
                    select: "'Contact Name','Contact Title','Contact Location','Contact Phone'", 
                    from: tableid,
                    geometryColumn: 'Geometry',
                    suppressMapTips: false,
                    delay: 500,
                    tolerance: 8
                });
            ;
        // Try W3C Geolocation (Preferred) 
        if(navigator.geolocation) {
            browserSupportFlag = true;
            navigator.geolocation.getCurrentPosition(function(position) {
                initialLocation = new google.maps.LatLng(position.coords.latitude,position.coords.longitude);
                map.setCenter(initialLocation);

                                //Custom Marker
                                var pinColor = "A83C0A";
                    var pinImage = new google.maps.MarkerImage("http://chart.apis.google.com/chart?chst=d_map_pin_letter&chld=%E2%80%A2|" + pinColor,
                        new google.maps.Size(21, 34),
                        new google.maps.Point(0,0),
                        new google.maps.Point(10, 34));
                                var pinShadow = new google.maps.MarkerImage("http://chart.apis.google.com/chart?chst=d_map_pin_shadow",
                        new google.maps.Size(40, 37),
                        new google.maps.Point(0, 0),
                        new google.maps.Point(12, 35));

                new google.maps.Marker({
                    position: initialLocation,
                    map: map,
                                        icon: pinImage,
                                        shadow: pinShadow
                });
            }, function() {
                handleNoGeolocation(browserSupportFlag);
            });
        }
        // Browser doesn't support Geolocation
        else {
            browserSupportFlag = false;
            handleNoGeolocation(browserSupportFlag);
        }

        function handleNoGeolocation(errorFlag) {
            if (errorFlag == true) {
                //Geolocation service failed
                initialLocation = uscenter;
            } else {
                //Browser doesn't support geolocation
                initialLocation = uscenter;
            }
            map.setCenter(initialLocation);
        } 
    }

google.maps.event.addDomListener(window, 'load', initialize);

</script>

Fancyboxバージョン2にアップグレードすることで解決しました。

4

2 に答える 2

1

デモサイトを見ると、いくつかの問題を修正する必要があると思います。

まず、このコードはシナリオで機能するはずです

$(document).ready(function(){
  $("a.form-modal").fancybox({
 // I would suggested to set some dimensions to the iframe (try without them first if you want)
    width: 640, // or whatever
    height: 320, 
    type : "iframe"
  });
}); // ready

このメソッドを使用するFancyboxv2.xを使用しているように見えるため、 Dr.Molle.on()によって提案された使用を無視していることに注意してください。live

2番目:使用しているバージョンに応じて適切なFancyboxのCSSスタイルシートをリンクします...現在、fancybox v2.1.3を使用している場合は、fancyboxv1.3.4CSSスタイルシートにリンクしています。

3番目:jQueryの単一インスタンス(理想的には最新バージョン)を使用します。現在、v1.5.2v1.7の2つをロードしています

...また、このタイプのjsエラーを回避するために、jQueryが他のjsプラグインの前にロードされていることを確認してください

Timestamp: 26/10/2012 11:54:49 AM
Error: TypeError: jQuery("ul.sf-menu").superfish is not a function
Source File: https://sitepreview.na14.force.com/contact-us
Line: 756
于 2012-10-26T18:57:31.443 に答える
0

これは私にとってはうまくいきます( fancybox2 を使用)

jQuery(function($){
 $('#map-canvas')
  .on('click',
      'a.video-modal',
      function(e){
        e.preventDefault();
        $(this).data('fancybox-type','iframe');
        $.fancybox(this);
     });
  });

すべてのリンクは同じクラス (video-modal) を持っているため、次のことだけを行う必要があります。

  1. これらのリンクのクリックを観察し、それが発生した場合:
  2. data-fancybox-typeリンクの を「iframe」に設定します
  3. link-object を引数として指定して、fancybox を開きます
于 2012-10-26T16:57:56.093 に答える