簡體   English   中英

動態設置GMLib的Google Maps Api Key

[英]Dynamic setting of Google Maps Api Key for GMLib component

過去,這是有關為gmlib組件設置Google Maps Api Key的問題。 提供的解決方案是更改'map.html'頭元素,然后重新編譯資源(rc.cmd)並重新編譯組件。 這是一個非常靜態的解決方案,有時在運行時動態設置api密鑰會更方便,例如,當某人想為不同的項目使用不同的密鑰時(api密鑰可以存儲在項目的ini / property文件中)。 我認為最好的方法是GMMap組件的屬性和構造函數的新參數。 我在google maps javascript api中搜索了一些功能,例如更改/設置api鍵,但沒有找到任何功能。 看來api鍵必須“硬編碼”到html文件的head標簽中,並且沒有JavaScript函數可以對其進行更改。 (如果存在某些javascript函數,則ExecuteScript會調用它。)

任何想法如何在運行時設置api密鑰?

例如,我發現此鏈接可以更改文檔本身:是否可以通過JavaScript動態更改/設置Google Maps API密鑰?

如何在gmlib中利用它?

提前致謝。

確實,此解決方案對於GMLib來說不是必需的,因為當您(他的組件)從資源文件加載HTML映射時,可以在加載到TWebBrowser之前通過代碼更改此行(可以添加鍵)。

您需要在TGMMap中添加鍵屬性,並在GetBaseHTMLCode方法中考慮此屬性。

為了輕松更改此鍵,您可以從HTML代碼更改此行

<script type="text/javascript" src="https://maps.google.com/maps/api/js?sensor=false&libraries=weather,panoramio,geometry,drawing"></script>

被這個

<script type="text/javascript" src="https://maps.google.com/maps/api/js?%ssensor=false&libraries=weather,panoramio,geometry,drawing"></script>

並為此更改GetBaseHTMLCode方法

function TCustomGMMap.GetBaseHTMLCode: string;
var
  List: TStringList;
  Stream: TResourceStream;
begin
  Result := '';

  List := TStringList.Create;
  try
    try
      Stream := TResourceStream.Create(HInstance, RES_MAPA_CODE, RT_RCDATA);
      List.LoadFromStream(Stream);
      Result := List.Text;
      Result := Format(Result, [KeyProerty]); // <== add this line
    finally
      if Assigned(Stream) then FreeAndNil(Stream);
      if Assigned(List) then FreeAndNil(List);
    end;
  except
    raise Exception.Create(GetTranslateText('No se ha podido cargar el recurso', Language));
  end;
end;

此更改尚未測試,但這是想法:-)

我將其放入本周的待辦事項列表中;-)

問候

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM